shardingsphere初体验-shardingsphere-jdbc
shardingsphere初体验-shardingsphere-jdbc
下载源码
第一步,先把代码down下来https://github.com/apache/shardingsphere
下载的时候如果没有修改配置的话,会提示文件名太长
这个时候需要修改git的配置
git config --global core.longpaths true
下载完,我们选择最新发布是5.0.0-beta分支
编译代码
在项目根目录执行下面的命令
mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
执行过程可能会报错,找不到某个模块的依赖
解决方法很简单,缺少什么模块,就先单独install这个模块,然后继续执行上面的命令,例如:
示例代码
shardingsphere有一个example模块,选中目录右键添加为maven项目,然后在这个目录下执行
mvn clean install
执行完效果如下,说明我们的示例代码编译好了
启动数据库
启动mysql
然后执行官方提供的数据库初始化脚本:examples/src/resources/manual_schema.sql
修改配置
因为我设置的mysql没有密码,所以不需要修改配置,如果你的mysql设置了密码,这里修改密码即可,文件路径如下:examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-databases-range.yaml
dataSources:
ds_0:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password:
ds_1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password:
执行示例代码
运行examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/YamlRangeConfigurationExampleMain.java
输出日志如下:
Connected to the target VM, address: '127.0.0.1:59782', transport: 'socket'
[INFO ] 2021-08-24 00:07:22,547 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Starting...
[INFO ] 2021-08-24 00:07:23,037 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Start completed.
[INFO ] 2021-08-24 00:07:23,067 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Starting...
[INFO ] 2021-08-24 00:07:23,077 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Start completed.
-------------- Process Success Begin ---------------
---------------------------- Insert Data ----------------------------
---------------------------- Print Order Data -----------------------
order_id: 636717375777386496, user_id: 1, address_id: 1, status: INSERT_TEST
order_id: 636717376700133376, user_id: 2, address_id: 2, status: INSERT_TEST
order_id: 636717377287335936, user_id: 3, address_id: 3, status: INSERT_TEST
order_id: 636717377874538496, user_id: 4, address_id: 4, status: INSERT_TEST
order_id: 636717379048943616, user_id: 5, address_id: 5, status: INSERT_TEST
order_id: 636717379640340480, user_id: 6, address_id: 6, status: INSERT_TEST
order_id: 636717380223348736, user_id: 7, address_id: 7, status: INSERT_TEST
order_id: 636717380856688640, user_id: 8, address_id: 8, status: INSERT_TEST
order_id: 636717381481639936, user_id: 9, address_id: 9, status: INSERT_TEST
order_id: 636717382114979840, user_id: 10, address_id: 10, status: INSERT_TEST
---------------------------- Print OrderItem Data -------------------
order_item_id:636717376238759937, order_id: 636717375777386496, user_id: 1, status: INSERT_TEST
order_item_id:636717376993734657, order_id: 636717376700133376, user_id: 2, status: INSERT_TEST
order_item_id:636717377580937217, order_id: 636717377287335936, user_id: 3, status: INSERT_TEST
order_item_id:636717378755342337, order_id: 636717377874538496, user_id: 4, status: INSERT_TEST
order_item_id:636717379342544897, order_id: 636717379048943616, user_id: 5, status: INSERT_TEST
order_item_id:636717379887804417, order_id: 636717379640340480, user_id: 6, status: INSERT_TEST
order_item_id:636717380516950017, order_id: 636717380223348736, user_id: 7, status: INSERT_TEST
order_item_id:636717381146095617, order_id: 636717380856688640, user_id: 8, status: INSERT_TEST
order_item_id:636717381775241217, order_id: 636717381481639936, user_id: 9, status: INSERT_TEST
order_item_id:636717382366638081, order_id: 636717382114979840, user_id: 10, status: INSERT_TEST
---------------------------- Delete Data ----------------------------
---------------------------- Print Order Data -----------------------
---------------------------- Print OrderItem Data -------------------
-------------- Process Success Finish --------------
Disconnected from the target VM, address: '127.0.0.1:59782', transport: 'socket'
Process finished with exit code 0
我们可以代码里打断点,然后看数据库里的数据,发现如我们配置的分表规则,数据分别插入了两个数据库里
读写分离
查看examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/readwrite-splitting.yaml的配置
修改YamlRangeConfigurationExampleMain主类里加载的配置文件
运行报错:提读库里表不存在
手动在demo_read_ds_0和demo_read_ds_1数据库执行建表语句后,运行YamlRangeConfigurationExampleMain结果如下:
Connected to the target VM, address: '127.0.0.1:52414', transport: 'socket'
[INFO ] 2021-08-24 00:44:15,196 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Starting...
[INFO ] 2021-08-24 00:44:15,841 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Start completed.
[INFO ] 2021-08-24 00:44:15,898 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Starting...
[INFO ] 2021-08-24 00:44:15,938 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Start completed.
[INFO ] 2021-08-24 00:44:15,939 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-3 - Starting...
[INFO ] 2021-08-24 00:44:15,955 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-3 - Start completed.
-------------- Process Success Begin ---------------
---------------------------- Insert Data ----------------------------
---------------------------- Print Order Data -----------------------
---------------------------- Print OrderItem Data -------------------
---------------------------- Delete Data ----------------------------
---------------------------- Print Order Data -----------------------
---------------------------- Print OrderItem Data -------------------
-------------- Process Success Finish --------------
Disconnected from the target VM, address: '127.0.0.1:52414', transport: 'socket'
Process finished with exit code 0
查询没查到数据,是因为读的读库,数据全部写入主库了。