Maven依赖
驱动为 polardbx-connector-java,同时通过 provided 方式依赖 mysql-connector-java,便于用户自行选择使用的 MySQL JDBC connector。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.alibaba.polardbx</groupId>
<artifactId>polardbx-connector-java</artifactId>
<version>2.1.2</version>
</dependency>快速使用例子
1. 直接使用驱动连接 PolarDB-X
Class.forName("com.alibaba.polardbx.Driver");
try (final Connection conn = DriverManager.getConnection(
"jdbc:polardbx://127.0.0.1:3306/", "root", "*****");
final Statement stmt = conn.createStatement()) {
try (final ResultSet rs = stmt.executeQuery("select 1")) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getMetaData().getColumnName(i + 1) + "\t");
}
System.out.println();
while (rs.next()) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getObject(i + 1) + "\t");
}
System.out.println();
}
}
}2. 使用 Druid 连接池
try (final DruidDataSource dataSource = new DruidDataSource()) {
dataSource.setUrl("jdbc:polardbx://127.0.0.1:3306/");
dataSource.setUsername("root");
dataSource.setPassword("*****");
// 当 druid 连接池版本小于等于 1.2.23 时,需要主动调用 setDriverClassName 和 setExceptionSorter,以适配 PolarDB-X 的驱动,新版本 1.2.24 及后续版本能够自动识别驱动
dataSource.setDriverClassName("com.alibaba.polardbx.Driver");
dataSource.setExceptionSorter(new MySqlExceptionSorter());
try (final Connection conn = dataSource.getConnection();
final Statement stmt = conn.createStatement()) {
try (final ResultSet rs = stmt.executeQuery("select 1")) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getMetaData().getColumnName(i + 1) + "\t");
}
System.out.println();
while (rs.next()) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getObject(i + 1) + "\t");
}
System.out.println();
}
}
}
}或者通过 xml 设置数据源后,通过代码,新增这两项适配新驱动:
dataSource.setDriverClassName("com.alibaba.polardbx.Driver");
dataSource.setExceptionSorter(new MySqlExceptionSorter());3. 使用 HikariCP 连接池
Class.forName("com.alibaba.polardbx.Driver");
final HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:polardbx://127.0.0.1:3306/");
config.setUsername("root");
config.setPassword("*****");
config.setMaximumPoolSize(10);
try (HikariDataSource dataSource = new HikariDataSource(config)) {
try (final Connection conn = dataSource.getConnection();
final Statement stmt = conn.createStatement()) {
try (final ResultSet rs = stmt.executeQuery("select 1")) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getMetaData().getColumnName(i + 1) + "\t");
}
System.out.println();
while (rs.next()) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getObject(i + 1) + "\t");
}
System.out.println();
}
}
}
}4. 使用 DBCP 连接池
Class.forName("com.alibaba.polardbx.Driver");
final BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:polardbx://127.0.0.1:3306/");
dataSource.setUsername("root");
dataSource.setPassword("*****");
dataSource.setInitialSize(5);
try (final Connection conn = dataSource.getConnection();
final Statement stmt = conn.createStatement()) {
try (final ResultSet rs = stmt.executeQuery("select 1")) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getMetaData().getColumnName(i + 1) + "\t");
}
System.out.println();
while (rs.next()) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getObject(i + 1) + "\t");
}
System.out.println();
}
}
}实际Demo
- 在测试开发环境
配置 JDK 环境 - 下载polardbx-connector-java-2.1.2.jar 和 mysql-connector-j-8.0.33.jar
- 编写测试文件,注意替换为自己集群的地址、用户名、密码,并确保网络能连通,如下代码展示连接 PolarDB-X 标准版集群,并打印集群的相关信息
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class TestDriver {
public static void main(String[] args) throws Exception {
Class.forName("com.alibaba.polardbx.Driver");
try (final Connection conn = DriverManager.getConnection(
"jdbc:polardbx://127.0.0.1:3306/", "root", "****");
final Statement stmt = conn.createStatement()) {
try (final ResultSet rs = stmt.executeQuery("select * from information_schema.alisql_cluster_global")) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getMetaData().getColumnName(i + 1) + "\t");
}
System.out.println();
while (rs.next()) {
for (int i = 0; i < rs.getMetaData().getColumnCount(); ++i) {
System.out.print(rs.getObject(i + 1) + "\t");
}
System.out.println();
}
}
}
}
}编译运行
$javac TestDriver.java
$ll
total 2812
-rw-r--r-- 1 chenyu.zzy users 2481560 Dec 3 17:26 mysql-connector-j-8.0.33.jar
-rw-r--r-- 1 chenyu.zzy users 384133 Dec 3 17:19 polardbx-connector-java-2.1.2.jar
-rw-r--r-- 1 chenyu.zzy users 2442 Dec 3 17:29 TestDriver.class
-rw-r--r-- 1 chenyu.zzy users 1102 Dec 3 17:29 TestDriver.java
# 第一次运行时,高可用会打印获取到的集群信息到日志接口中
$java -cp .:mysql-connector-j-8.0.33.jar:polardbx-connector-java-2.1.2.jar TestDriver
Dec 03, 2024 5:29:58 PM com.alibaba.polardbx.HaManager info
INFO: Backend cluster state changed to: [{"tag":"127.0.0.1:6991","host":"127.0.0.1","port":6991,"xport":34991,"paxos_port":14991,"role":"Leader","peers":[{"tag":"11.167.60.147:6992","host":"11.167.60.147","port":6992,"xport":-1,"paxos_port":14992,"role":"Follower","version":"8.0.32-X-Cluster-8.4.20-20241014","cluster_id ":6990,"update_time":"2024-12-03 17:29:58 GMT+08:00"},{"tag":"11.167.60.147:6993","host":"11.167.60.147","port":6993,"xport":-1,"paxos_port":14993,"role":"Follower","version":"8.0.32-X-Cluster-8.4.20-20241014","cluster_id":6990,"update_time":"2024-12-03 17:29:58 GMT+08:00"},{"tag":"127.0.0.1:6991","host":"11.167.60.147","port":6991,"xport":34991,"paxos_port":14991,"role":"Leader","version":"8.0.32-X-Cluster-8.4.20-20241014","cluster_id":6990,"update_time":"2024-12-03 17:29:58 GMT+08:00"}],"version":"8.0.32-X-Cluster-8.4.20-20241014","cluster_id":6990,"update_time":"2024-12-03 17:29:58 GMT+08:00"}]
SERVER_ID IP_PORT MATCH_INDEX NEXT_INDEX ROLE HAS_VOTED FORCE_SYNC ELECTION_WEIGHT LEARNER_SOURCE APPLIED_INDEX PIPELINING SEND_APPLIED
1 11.167.60.147:14991 264333 0 Leader Yes No 9 0 264332 No No
2 11.167.60.147:14992 264333 264334 Follower Yes No 9 0 264333 Yes No
3 11.167.60.147:14993 264333 264334 Follower Yes No 1 0 264333 Yes No
# 再次运行由于集群信息没有变化,则不会打印相关信息(集群信息会被缓存以加快初始化速度)
$java -cp .:mysql-connector-j-8.0.33.jar:polardbx-connector-java-2.1.2.jar TestDriver
SERVER_ID IP_PORT MATCH_INDEX NEXT_INDEX ROLE HAS_VOTED FORCE_SYNC ELECTION_WEIGHT LEARNER_SOURCE APPLIED_INDEX PIPELINING SEND_APPLIED
1 11.167.60.147:14991 264333 0 Leader Yes No 9 0 264332 No No
2 11.167.60.147:14992 264333 264334 Follower Yes No 9 0 264333 Yes No
3 11.167.60.147:14993 264333 264334 Follower Yes No 1 0 264333 Yes No「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




