由于项目的数据量越来越大,今天利用Sharding-JDBC来进行分表操作。
Maven依赖如下:
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>3.0.0</version>
</dependency>
Sping的配置文件如下:
#JPA配置
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.show_sql = true
spring.jpa.properties.use_sql_comments = false
spring.jpa.properties.format_sql = false
logging.level.org.springframework.info = INFO
sharding.jdbc.datasource.names=ds0
sharding.jdbc.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds0.driverClassName=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.jdbcUrl=jdbc:mysql://localhost:3306/test
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=
#配置全局策略
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds0
##login_user_log
sharding.jdbc.config.sharding.tables.login_user_log.actual-data-nodes=ds0.login_user_log_${0..2}
sharding.jdbc.config.sharding.tables.login_user_log.table-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.tables.login_user_log.table-strategy.inline.algorithm-expression=login_user_log_$->{ user_id % 2 }
##user_course
sharding.jdbc.config.sharding.tables.user_course.actual-data-nodes=ds0.user_course_${0..2}
sharding.jdbc.config.sharding.tables.user_course.table-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.tables.user_course.table-strategy.inline.algorithm-expression=user_course_$->{ user_id % 2 }
sharding.jdbc.config.sharding.binding-tables=login_user_log,user_course
sharding.jdbc.config.sharding.default-data-source-name=ds0
sharding.jdbc.config.sharding.props.sql.show=true
以上就是全部的配置文件了。
这里有个坑,大家需要注意下,如果你项目中使用的是JPA的话,那么Jpa默认的pageable分页是没有办法用的,findAll()可以正常返回list,但是Pageable就不行了,具体问题不明。
有问题可以在下面评论,技术问题可以私聊我。