内置时间范围分片算法规则配置有问题

规则配置如下

    rules:
      sharding:
        tables:
          tbRecvRcd:
            actualDataNodes: record_$->{0..1}.tbRecvRcd_$->{20220101..20300101}
            table-strategy:
              standard:
                sharding-algorithm-name: default-date-algorithms
                sharding-column: recvTm
          record_app_type_statistics:
            actualDataNodes: record_$->{0..1}.record_app_type_statistics_$->{20220602..20300101}
            table-strategy:
              standard:
                sharding-algorithm-name: date-algorithms
                sharding-column: statisticsTime
        sharding-algorithms:
          default-date-algorithms:
            type: INTERVAL
            props:
              datetime-pattern: 'yyyy-MM-dd HH:mm:ss'
              datetime-lower: '2022-01-01 00:00:00'
              datetime-upper: '2030-12-01 00:00:00'
              sharding-suffix-pattern: 'yyyyMMdd'
              datetime-interval-amount: 1
              datetime-interval-unit: 'DAYS'
          date-algorithms:
            type: INTERVAL
            props:
              datetime-pattern: 'yyyy-MM-dd'
              datetime-lower: '2022-01-01'
              datetime-upper: '2030-12-01'
              sharding-suffix-pattern: 'yyyyMMdd'
              datetime-interval-amount: 1
              datetime-interval-unit: 'DAYS'

启动报错信息如下

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingSphereDataSource' defined in class path resource [org/apache/shardingsphere/spring/boot/ShardingSphereAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'shardingSphereDataSource' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingRuleConfiguration' defined in class path resource [org/apache/shardingsphere/sharding/spring/boot/ShardingRuleSpringBootConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.shardingsphere.infra.config.RuleConfiguration]: Factory method 'shardingRuleConfiguration' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'date-algorithms': Initialization of bean failed; nested exception is org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException: Invalid datetime-lower, datetime pattern should be `yyyy-MM-dd`, value is `2022-01-01`
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:657)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:637)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1341)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1181)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1247)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1236)
	at com.chinaskyline.lab.manager.PaasOtpApiApplication.main(PaasOtpApiApplication.java:14)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'shardingSphereDataSource' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingRuleConfiguration' defined in class path resource [org/apache/shardingsphere/sharding/spring/boot/ShardingRuleSpringBootConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.shardingsphere.infra.config.RuleConfiguration]: Factory method 'shardingRuleConfiguration' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'date-algorithms': Initialization of bean failed; nested exception is org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException: Invalid datetime-lower, datetime pattern should be `yyyy-MM-dd`, value is `2022-01-01`
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652)
	... 20 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingRuleConfiguration' defined in class path resource [org/apache/shardingsphere/sharding/spring/boot/ShardingRuleSpringBootConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.shardingsphere.infra.config.RuleConfiguration]: Factory method 'shardingRuleConfiguration' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'date-algorithms': Initialization of bean failed; nested exception is org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException: Invalid datetime-lower, datetime pattern should be `yyyy-MM-dd`, value is `2022-01-01`
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:657)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:637)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1341)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1181)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1525)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1489)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1378)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1265)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfAvailable(DefaultListableBeanFactory.java:1947)
	at org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration.shardingSphereDataSource(ShardingSphereAutoConfiguration.java:92)
	at org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration$$EnhancerBySpringCGLIB$$f9919008.CGLIB$shardingSphereDataSource$2(<generated>)
	at org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration$$EnhancerBySpringCGLIB$$f9919008$$FastClassBySpringCGLIB$$eb07264f.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
	at org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration$$EnhancerBySpringCGLIB$$f9919008.shardingSphereDataSource(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
	... 21 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.shardingsphere.infra.config.RuleConfiguration]: Factory method 'shardingRuleConfiguration' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'date-algorithms': Initialization of bean failed; nested exception is org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException: Invalid datetime-lower, datetime pattern should be `yyyy-MM-dd`, value is `2022-01-01`
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652)
	... 47 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'date-algorithms': Initialization of bean failed; nested exception is org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException: Invalid datetime-lower, datetime pattern should be `yyyy-MM-dd`, value is `2022-01-01`
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1525)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1489)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1408)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1265)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfAvailable(DefaultListableBeanFactory.java:1947)
	at org.apache.shardingsphere.sharding.spring.boot.ShardingRuleSpringBootConfiguration.shardingRuleConfiguration(ShardingRuleSpringBootConfiguration.java:67)
	at org.apache.shardingsphere.sharding.spring.boot.ShardingRuleSpringBootConfiguration$$EnhancerBySpringCGLIB$$2f6e5c6d.CGLIB$shardingRuleConfiguration$0(<generated>)
	at org.apache.shardingsphere.sharding.spring.boot.ShardingRuleSpringBootConfiguration$$EnhancerBySpringCGLIB$$2f6e5c6d$$FastClassBySpringCGLIB$$5e09467f.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
	at org.apache.shardingsphere.sharding.spring.boot.ShardingRuleSpringBootConfiguration$$EnhancerBySpringCGLIB$$2f6e5c6d.shardingRuleConfiguration(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
	... 48 common frames omitted
Caused by: org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException: Invalid datetime-lower, datetime pattern should be `yyyy-MM-dd`, value is `2022-01-01`
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.getDateTime(IntervalShardingAlgorithm.java:105)
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.getDateTimeLower(IntervalShardingAlgorithm.java:94)
	at org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm.init(IntervalShardingAlgorithm.java:80)
	at org.apache.shardingsphere.spring.boot.registry.AbstractAlgorithmProvidedBeanRegistry.postProcessAfterInitialization(AbstractAlgorithmProvidedBeanRegistry.java:98)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:430)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1803)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
	... 70 common frames omitted

是datetime-pattern得格式不对吗

这个异常应该是 INTERVAL 算法内部使用了 LocalDataTime 类型导致的,可以尝试下 master 分支,最近有社区的同学在增强这个算法。

1 个赞

正如楼上大佬所言, master 已修复这个问题. 请等待 5.1.2 版本

超哥威武,直接上 code

哈哈, 验证下.

5.1.2什么时候发布? :grinning_face_with_smiling_eyes:

大概在这个月吧.

@xieyc 有为 Add more JSR-310 classes support to IntervalShardingAlgorithm that are not yet supported · Issue #17948 · apache/shardingsphere (github.com) 提交 PR 的打算吗? :eyes:

京ICP备2021015875号