操作步驟
通過串連池Druid串連Lindorm寬表引擎前,需要安裝串連池Druid和Lindorm JDBC Driver。
以Maven專案為例,在pom.xml
檔案的dependencies
中添加以下依賴項。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
如果您是通過druid-spring-boot-starter使用Druid串連池,則需要先排除druid-spring-boot-starter依賴的druid組件,再顯式依賴druid組件,具體代碼如下所示。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
配置串連池Druid的參數。在Maven專案的src/main/resources
目錄中建立druid.properties
檔案,並在檔案中添加以下內容。
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/database?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000&socketTimeout=120000
username=****
password=****
init=true
initialSize=10
maxActive=200
minIdle=200
maxWait=30000
druid.keepAlive=true
druid.keepAliveBetweenTimeMillis=120000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=1800000
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
參數說明
參數 | 說明 |
url | MySQL協議的Java JDBC串連地址。格式為jdbc:mysql://<MySQL相容地址>/<資料庫名>?<串連配置> 。 資料庫名不填寫時預設串連default資料庫。如何擷取MySQL相容地址,請參見查看串連地址。 串連配置可以有效提升效能,建議全部填寫,詳細說明,請參見串連配置說明。 重要 如果應用部署在ECS執行個體,建議您通過專用網路訪問Lindorm執行個體,以獲得更高的安全性和更低的網路延遲。 如果應用部署在本地,在通過公網串連Lindorm執行個體前,需在控制台開通公網地址。開通方式:在控制台選擇,在寬表引擎頁簽單擊開通公網地址。 通過專用網路訪問Lindorm執行個體,url中請填寫MySQL相容地址對應的專用網路地址。通過公網訪問Lindorm執行個體,url中請填寫MySQL相容地址對應的公網地址。
|
username | 如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。具體操作,請參見修改使用者密碼。 |
password |
載入串連池Druid的參數並初始化串連池Druid。
Properties properties = new Properties();
InputStream inputStream = DruidPoolDemo.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(inputStream);
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
通過串連池Druid擷取JDBC的串連資訊並訪問Lindorm寬表引擎。
String tableName = "sql_table_" + new Random().nextInt(1000);
try (Connection connection = dataSource.getConnection()) {
try (Statement statement = connection.createStatement()) {
String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))";
int ret = statement.executeUpdate(sql);
System.out.println(ret);
}
}
try (Connection connection = dataSource.getConnection()) {
String sql = "insert into " + tableName + "(id,name) values(?,?)";
try (PreparedStatement ps = connection.prepareStatement(sql)) {
ps.setString(1, "aa");
ps.setString(2, "bb");
int ret = ps.executeUpdate();
System.out.println(ret);
}
}
try (Connection connection = dataSource.getConnection()) {
String sql = "select * from " + tableName + " where id=?";
try (PreparedStatement ps = connection.prepareStatement(sql)) {
ps.setString(1, "aa");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String id = rs.getString(1);
String name = rs.getString(2);
System.out.println("id=" + id);
System.out.println("name=" + name);
}
}
}
try (Connection connection = dataSource.getConnection()) {
String sql = "delete from " + tableName + " where id=?";
try (PreparedStatement ps = connection.prepareStatement(sql)) {
ps.setString(1, "aa");
ps.executeUpdate();
}
}
說明
在Lindorm SQL中,insert
語句的語義與upsert
相同。由於MySQL JDBC的用戶端最佳化了insert
語句,因此在寫入資料時更推薦您使用insert
語句。
常見問題
Q:串連時報錯Read timed out
是什麼原因?
A:Druid串連池預設逾時時間為10秒,因此會出現Read timed out
報錯。您可以在串連串中添加socketTimeout參數來設定逾時時間,單位為毫秒(ms)。例如設定逾時時間長度為2分鐘(120,000毫秒):jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/" + database + "?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000&socketTimeout=120000