LindormDataSource封裝了開箱即用的最佳配置,支援全類型Lindorm執行個體(單可用性區域、多可用性區域)訪問,是面向Lindorm訪問的最佳高效能JDBC串連池。在使用多可用性區域Lindorm寬表執行個體時,LindormDataSource可靈活適配多種存取原則,如就近可用性區域訪問、指定可用性區域訪問、隨機可用性區域訪問等。
前提條件
已安裝Java環境,要求安裝JDK 1.8及以上版本。
已將用戶端IP添加至Lindorm白名單。
串連參數說明
本參數說明適用於本文所有樣本。
當通過MySQL協議訪問Lindorm時,如果串連地址和屬性檔案(Properties)中均未指定串連配置,LindormDataSource將會自行填充以提升SQL訪問效能,因此您僅需填寫下表參數即可。更詳細的說明,請參見附錄。
參數 | 說明 |
JdbcUrl(jdbcUrl) | MySQL協議的Java JDBC串連地址。格式為 資料庫名不填寫時預設串連default資料庫。MySQL相容地址擷取方式:查看串連地址。 重要
|
Username(username) | 串連寬表引擎的使用者名稱和密碼。 如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改使用者密碼。 |
Password(password) |
JDBC應用接入
通過LindormDataSource串連Lindorm寬表引擎前,需要安裝相關依賴。
以Maven專案為例,在
pom.xml檔案的dependencies中添加以下依賴項。<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-sql-datasource</artifactId> <version>2.2.1.4</version> </dependency>您可以通過以下兩種方式串連Lindorm寬表引擎。
在業務代碼中建立串連。
import com.aliyun.lindorm.sql.client.datasource.LindormDataSource; import com.aliyun.lindorm.sql.client.datasource.LindormDataSourceConfig; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class test { public static void main(String[] args) throws Exception{ LindormDataSourceConfig lindormDataSourceConfig = new LindormDataSourceConfig(); lindormDataSourceConfig.setJdbcUrl("jdbc:mysql://ld-bp1mq0tdzbx1m****-proxy-lindorm-pub.lindorm.aliyuncs.com:33060/database"); lindormDataSourceConfig.setUsername("r***"); lindormDataSourceConfig.setPassword("p***"); lindormDataSourceConfig.setMaximumPoolSize(30); LindormDataSource lindormDataSource = new LindormDataSource(lindormDataSourceConfig); try (Connection connection = lindormDataSource.getConnection()) { String sql = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "001"); 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); } } } } }通過設定檔建立串連。
在Maven專案的
src/main/resources目錄中建立lindorm.properties檔案,並在檔案中添加以下內容:jdbcUrl=jdbc:mysql://ld-bp1mq0tdzbx1m****-proxy-lindorm-pub.lindorm.aliyuncs.com:33060/default username=r*** password=p*** maximumPoolSize=30在您的業務代碼中添加以下內容。
LindormDataSourceConfig config = new LindormDataSourceConfig("lindorm.properties"); LindormDataSource lindormDataSource = new LindormDataSource(config);
Spring-Boot 2.x應用接入
通過LindormDataSource串連Lindorm寬表引擎前,需要安裝相關依賴。
以Maven專案為例,在
pom.xml檔案的dependencies中添加以下依賴項。<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-sql-datasource-springboot-starter</artifactId> <version>2.2.1.4</version> </dependency>添加Spring配置。在Maven專案的
src/main/resources目錄中建立application.yml檔案,並在檔案中添加以下內容。spring: datasource: lindorm: jdbc-url: jdbc:mysql://ld-bp167w8n1ab5p****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060/db1 username: r*** password: t*** maximum-pool-size: 30編寫業務代碼。
@Service public class DatabaseService { @Autowired private DataSource dataSource; public void createUser(User user) throws SQLException { String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, user.getName()); ps.setInt(2, user.getAge()); ps.executeUpdate(); } } }
Spring-Boot 3.x應用接入
通過LindormDataSource串連Lindorm寬表引擎前,需要安裝相關依賴。
以Maven專案為例,在
pom.xml檔案的dependencies中添加以下依賴項。<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-sql-datasource-springboot-3-starter</artifactId> <version>2.2.1.4</version> </dependency>添加Spring配置。在Maven專案的
src/main/resources目錄中建立application.yml檔案,並在檔案中添加以下內容。spring: datasource: lindorm: jdbc-url: jdbc:mysql://ld-bp167w8n1ab5p****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060/db1 username: r*** password: r*** maximum-pool-size: 30編寫業務代碼。
@Service public class DatabaseService { @Autowired private DataSource dataSource; public void createUser(User user) throws SQLException { String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, user.getName()); ps.setInt(2, user.getAge()); ps.executeUpdate(); } } }
MyBatis應用接入
在使用MyBatis時,如果基於Spring-Boot架構,可以在Spring-Boot中完成MyBatis配置。如果獨立使用MyBatis(不依賴Spring-Boot),請按照以下步驟進行配置。
通過LindormDataSource串連Lindorm寬表引擎前,需要安裝相關依賴。
以Maven專案為例,在
pom.xml檔案的dependencies中添加以下依賴項。<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-sql-datasource</artifactId> <version>2.2.1.4</version> </dependency>您可以通過以下兩種方式串連Lindorm寬表引擎。
在業務代碼中建立串連。
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); LindormDataSource dataSource = new LindormDataSource(); dataSource.setJdbcUrl("jdbc:mysql://ld-bp1mq0tdzbx1m****-proxy-lindorm-pub.lindorm.aliyuncs.com:33060"); dataSource.setUsername("r***"); dataSource.setPassword("r***"); sessionFactoryBean.setDataSource(dataSource); SqlSessionFactory sessionFactory = sessionFactoryBean.getObject(); try (SqlSession session = sessionFactory.openSession(true)) { UserMapper mapper = session.getMapper(UserMapper.class); mapper.insert(user); }通過設定檔建立串連。
定義一個符合Mybatis的DataSourceFactory。
package com.example.datasource; import com.aliyun.lindorm.sql.client.datasource.LindormDataSource; import com.aliyun.lindorm.sql.client.datasource.LindormDataSourceConfig; import org.apache.ibatis.datasource.DataSourceFactory; public class LindormDataSourceFactory implements DataSourceFactory { private Properties props; @Override public void setProperties(Properties props) { this.props = props; } @Override public DataSource getDataSource() { LindormDataSourceConfig config = new LindormDataSourceConfig(props); LindormDataSource dataSource = new LindormDataSource(config); return dataSource; } }在Maven專案的
src/main/resources目錄中建立mybatis-config.properties檔案,並在檔案中添加以下內容:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="com.example.datasource.LindormDataSourceFactory"> <property name="jdbcUrl" value="jdbc:mysql://ld-8vbn68478unu8****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060/lindorm_test"/> <property name="username" value="r***"/> <property name="password" value="t***"/> <property name="maximumPoolSize" value="30"/> </dataSource> </environment> </environments> <mappers> <mapper class="com.example.mapper.UserMapper"/> </mappers> </configuration>在您的業務代碼中添加以下內容。
public static void main(String[] args) throws SQLException, IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); UserService userService = new UserService(sqlSessionFactory); userService.run(); }
可選配置項
通常僅配置maximumPoolSize(最大串連池大小)即可,其餘配置項無需額外配置。
配置項 | 說明 |
maximumPoolSize | 最大串連數量,預設值為 |
minimumIdle | 最小空閑串連數。預設值和 |
connectionTimeout | 擷取連線逾時時間,單位為毫秒(ms),預設值為 |
keepaliveTime | 串連保活時間間隔,單位為毫秒(ms),預設值為 |
idleTimeout | 空閑連線逾時時間, 單位為毫秒(ms),預設值為 |
maxLifetime | 串連最長生命週期,單位為毫秒(ms),預設值為 |
附錄
當通過MySQL協議訪問Lindorm時,如果url(串連地址)和屬性檔案(Properties)中均未指定以下參數, LindormDataSource將會自行填充以提升SQL訪問效能。
自動填滿的預設參數如下:
("sslMode", "DISABLED");
("allowPublicKeyRetrieval", "true");
("useServerPrepStmts", "true");
("useLocalSessionState", "true");
("rewriteBatchedStatements", "true");
("cachePrepStmts", "true");
("prepStmtCacheSize", "300");
("prepStmtCacheSqlLimit", "50000000");因此,使用LindormDataSource時僅填寫MySQL協議的JDBC串連地址(url)並指定目標資料庫(database)即可,無需在串連串中添加串連配置。例如:jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/default。