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
。