SpringBoot+MybatisPlus+shardingsphere 使用年月分表

先引入依赖


	<properties>
        <druid.version>1.2.8</druid.version>
        <mybatis.plus.version>3.5.1</mybatis.plus.version>
        <mysql.connector.java.version>8.0.30</mysql.connector.java.version>
        <shardingsphere.version>5.0.0</shardingsphere.version>
    </properties>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>${shardingsphere.version}</version>
        </dependency>
        
         <!-- druid 注意这里不要使用springboot集成的druid,和shardingsphere不兼容-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis.plus.version}</version>
        </dependency>
       
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.java.version}</version>
        </dependency>

添加分表配置

#这里的table换成你的表名
spring.shardingsphere.rules.sharding.tables.bit_monitor_gather_history.actual-data-nodes=water-sharding.**table**_$->{2023..2024}_$->{1..12}

#使用表的insert_time进行分片
spring.shardingsphere.rules.sharding.tables.**table**.table-strategy.standard.sharding-column=insert_time

spring.shardingsphere.rules.sharding.tables.bit_monitor_gather_history.table-strategy.standard.sharding-algorithm-name=month-interval
spring.shardingsphere.rules.sharding.tables.bit_monitor_gather_history.key-generate-strategy.column=id
spring.shardingsphere.rules.sharding.tables.bit_monitor_gather_history.key-generate-strategy.key-generator-name=snowflake

#分片算法
spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.type=INTERVAL
#分片键的时间戳格式
spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.props.datetime-pattern=yyyy-MM-dd HH:mm:ss
#时间分片下界值
spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.props.datetime-lower=2023-01-01 00:00:00
#时间分片上界值,这里我没配置默认是当前时间(这里有坑下面说)
#spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.props.datetime-upper=

#分片键时间间隔,超过该时间间隔将进入下一分片
spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.props.datetime-interval-amount=1

#分片键时间间隔单位 默认为DAYS
spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.props.datetime-interval-unit=MONTHS

# 分片名后缀 我的后缀是 table_2023_1的格式
spring.shardingsphere.rules.sharding.sharding-algorithms.month-interval.props.sharding-suffix-pattern=yyyy_M
spring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKE

spring.shardingsphere.props.sql-show=false

说一说遇到的坑

1.datetime-upper 时间分片上界值

这个配置不设置默认是当前时间,我在测试的时候,用的测试数据大于当前时间,一直报错,最后跟进源码才发现,大于datetime-upper的数据是无法入库的,所以在测试的时候测试数据不要大于这个值。

2.spring.shardingsphere.rules.sharding.tables.bit_monitor_gather_history.actual-data-nodes=water-sharding.table_KaTeX parse error: Expected group after '_' at position 15: ->{2023..2024}_̲->{1…12}

注意这个配置,因为我开始是从10月开始分表,因此只创建了10-12月份的表,在做查询时,单表查询没问题,跨表查询就会报空指针。原因是shardingsphere在初始化数据源的时候会从table_2023_1开始加载逻辑表,但是我没有创建1的这个表,因此就没有加载到逻辑表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过创建一个配置类来配置springboot+DruidDataSource+shardingsphere的数据库配置,而不是将配置信息放在yml文件中。以下是一个示例配置类的代码: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DruidDataSourceBuilder.create().build(); } @Bean public DataSourceProxy dataSourceProxy(DataSource dataSource) { return new DataSourceProxy(dataSource); } @Bean public DataSourceRule dataSourceRule(DataSourceProxy dataSourceProxy) { DataSourceRule dataSourceRule = new DataSourceRule(dataSourceProxy); // 配置分库分表规则 // dataSourceRule.addDataSourceRule(...) // dataSourceRule.addTableRule(...) return dataSourceRule; } @Bean public ShardingRule shardingRule(DataSourceRule dataSourceRule) { ShardingRule shardingRule = ShardingRule.builder() .dataSourceRule(dataSourceRule) // 配置分片规则 // shardingRule.getTableRuleConfigs().add(...) .build(); return shardingRule; } @Bean public DataSource dataSource(ShardingRule shardingRule) throws SQLException { return ShardingDataSourceFactory.createDataSource(shardingRule); } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); // 配置其他属性 // sessionFactory.setMapperLocations(...) return sessionFactory.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 您可以根据自己的需求在配置类中添加适当的配置,比如配置数据源、分库分表规则、分片规则等。这样,您就可以将数据库配置信息集中在一个配置类中,而不是放在yml文件中。 #### 引用[.reference_title] - *1* *2* [springboot+druid连接池+mybatisplus+shardingsphere5.0alpha实现分库分表实战案例](https://blog.csdn.net/qq_40726812/article/details/120594172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Springboot+mybatis+shardingsphere 分库分表](https://blog.csdn.net/l_ian/article/details/120547449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值