springboot+shardingjdbc 按照月份分出12个表,完整配置及详解
时间: 2023-12-23 08:06:15 浏览: 195
首先,需要在pom.xml中引入Sharding-JDBC的依赖:
```xml
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding.jdbc.version}</version>
</dependency>
```
然后,需要在application.yml配置文件中添加Sharding-JDBC的数据源信息和分库分表规则:
```yaml
spring:
datasource:
# 主库配置
master:
url: jdbc:mysql://localhost:3306/main_db?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 从库配置
slave:
url: jdbc:mysql://localhost:3306/sub_db?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
sharding:
# 数据源列表
data-sources:
# 主库数据源
main-db:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/main_db?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
# 从库数据源
sub-db:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/sub_db?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
# 逻辑表与实际表映射规则
tables:
# user_info表分表规则
user_info:
actual-data-nodes: sub-db.user_info_$->{0..11}
table-strategy:
inline:
sharding-column: create_time
algorithm-expression: user_info_$->{create_time.month % 12}
```
以上配置中,我们定义了两个数据源(一个主库,一个从库),并且定义了一个user_info表的分表规则,按照create_time字段的月份将数据分到12个表中。
最后,我们需要在代码中实现Sharding-JDBC的数据源切换。可以通过在service层添加@Master注解,代表使用主库,或者@Slave注解,代表使用从库。
完整的示例代码可以参考以下链接:https://github.com/sharding-sphere/sharding-sphere-example/tree/4.1.1/sharding-jdbc-spring-boot-mybatis-example
阅读全文