本文介紹基於MySQL JDBC串連池Druid串連並訪問Lindorm寬表引擎的使用方法。
前提條件
已開通MySQL協議。如何開通,請參見開通MySQL協議相容功能。
已安裝Java環境,要求安裝JDK 1.8及以上版本。
已將用戶端IP添加至白名單,具體操作請參見設定白名單。
操作步驟
通過串連池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、username、password需要替換為業務實際的內容,可以在Lindorm控制台上擷取 # database為需要串連的資料庫 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 username=**** password=**** # 初始化串連池即建立串連,建議保持不變 init=true # 初始化串連池時建立串連的個數,可以根據實際情況調整 initialSize=10 # 串連池中允許的最大串連數量,可以根據實際情況調整,建議和業務線程池大小相同 maxActive=200 # 串連池中維護的空閑串連的數量,可以根據實際情況調整,建議和maxActive的值相同 minIdle=200 # 擷取串連最大等待時間,單位毫秒(ms),建議保持不變 maxWait=30000 # 串連保活配置項,建議保持不變,否則可能出現串連斷開 druid.keepAlive=true # 串連空閑多久以後,會檢查串連的有效性 druid.keepAliveBetweenTimeMillis=120000 # 多久執行一次淘汰串連和保活操作 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=1800000 # 串連驗證配置項,建議保持不變 testWhileIdle=true testOnBorrow=false testOnReturn=false
參數說明
參數
說明
url
MySQL JDBC串連地址。格式為
jdbc:mysql://<MySQL相容地址>/<資料庫名>?串連配置參數
。MySQL相容地址的擷取方式,請參見查看串連地址。僅填寫MySQL JDBC串連地址時,預設串連default資料庫。
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寬表引擎。
/* -------------- 基於JDBC的訪問樣本 ----------------- */ 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
語句。