使用shardingsphere分表遇到的坑

配置如下:

分表正常,但是查询create_date字段的时候如果用yyyy-MM-dd的时间字符串来查询的话,会报错:

### Cause: java.lang.StringIndexOutOfBoundsException: String index out of range: 19] with root cause

java.lang.StringIndexOutOfBoundsException: String index out of range: 19
	at java.lang.String.substring(String.java:1963)
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.parseDateTime(IntervalShardingAlgorithm.java:155)
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.hasIntersection(IntervalShardingAlgorithm.java:146)
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.doSharding(IntervalShardingAlgorithm.java:137)
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.doSharding(IntervalShardingAlgorithm.java:130)
	at org.apache.shardingsphere.sharding.route.strategy.type.standard.StandardShardingStrategy.doSharding(StandardShardingStrategy.java:87)
	at org.apache.shardingsphere.sharding.route.strategy.type.standard.StandardShardingStrategy.doSharding(StandardShardingStrategy.java:64)
	at org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.routeTables(ShardingStandardRoutingEngine.java:217)
	at org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.route0(ShardingStandardRoutingEngine.java:197)
	at org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.routeByShardingConditionsWithCondition(ShardingStandardRoutingEngine.java:117)
	at org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.routeByShardingConditions(ShardingStandardRoutingEngine.java:110)
	at org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.getDataNodes(ShardingStandardRoutingEngine.java:87)
	at org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.route(ShardingStandardRoutingEngine.java:69)
	at org.apache.shardingsphere.sharding.route.engine.ShardingSQLRouter.createRouteContext(ShardingSQLRouter.java:56)
	at org.apache.shardingsphere.sharding.route.engine.ShardingSQLRouter.createRouteContext(ShardingSQLRouter.java:44)
	at org.apache.shardingsphere.infra.route.engine.impl.PartialSQLRouteExecutor.route(PartialSQLRouteExecutor.java:73)
	at org
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ShardingSphere是一个开源的分布式数据库中间件,用于处理数据库的分库分表问题。在ShardingSphere中,分表配置是通过配置文件来实现的。 首先,你需要在ShardingSphere的配置文件中指定数据源和数据表的规则。在数据源规则中,你可以配置多个数据源,每个数据源对应一个数据库,可以是主库或者从库。在数据表规则中,你需要指定分表的策略和分表字段。 下面是一个示例的ShardingSphere配置文件中的分表配置部分的示例: ```yaml dataSources: ds0: ... ds1: ... rules: - !SHARDING tables: user: actualDataNodes: ds${0..1}.user_${0..2} tableStrategy: standard: shardingColumn: user_id shardingAlgorithmName: userShardingAlgorithm ... shardingAlgorithms: userShardingAlgorithm: type: INLINE props: algorithm-expression: user_${user_id % 3} ``` 在上面的示例中,我们配置了两个数据源(ds0和ds1),每个数据源对应一个数据库。然后,我们定义了一个user表的分表规则。actualDataNodes指定了实际的数据节点,其中ds${0..1}表示ds0和ds1两个数据源,user_${0..2}表示user_0、user_1和user_2三张真实的数据表。tableStrategy指定了分表策略,这里使用了标准的分表策略,根据user_id字段进行分表使用了名为userShardingAlgorithm的分表算法。 最后,我们还需要在ShardingSphere中配置userShardingAlgorithm的具体实现,这里使用了INLINE方式,通过取模运算来确定数据表。 以上是一个简单的ShardingSphere分表配置的示例,你可以根据自己的需求进行配置。具体的配置方式还会根据你使用的数据库和ShardingSphere的版本而有所不同,你可以参考ShardingSphere的官方文档来获取更详细的配置信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值