本文介绍基于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
语句。