oracle下更新 shardingsphere 的上下文规则配置报错

#遇到问题

动态更新配置 actualDataNodes 时出现问题

相关依赖

        <!-- Sharding-JDBC -->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>

相关代码块


调用 ContextManager contextManager = ShardingSphereDataSource.getContextManager;
    contextManager.alterRuleConfiguration(schemaName, newRuleConfigList);   //oracle下更新 shardingsphere 的上下文规则配置报错


2023-07-15 16:59:02.920 ERROR 32696 --- [           main] .a.s.i.m.s.b.l.TableMetaDataLoaderEngine : Dialect load table meta data error

org.apache.shardingsphere.infra.exception.ShardingSphereException: java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at org.apache.shardingsphere.infra.metadata.schema.builder.loader.TableMetaDataLoaderEngine.loadByDialect(TableMetaDataLoaderEngine.java:98) ~[shardingsphere-infra-common-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.infra.metadata.schema.builder.loader.TableMetaDataLoaderEngine.load(TableMetaDataLoaderEngine.java:65) ~[shardingsphere-infra-common-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.singletable.metadata.SingleTableMetaDataBuilder.load(SingleTableMetaDataBuilder.java:56) [shardingsphere-single-table-core-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.singletable.metadata.SingleTableMetaDataBuilder.load(SingleTableMetaDataBuilder.java:43) [shardingsphere-single-table-core-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.infra.metadata.schema.builder.TableMetaDataBuilder.load(TableMetaDataBuilder.java:64) [shardingsphere-infra-common-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.infra.metadata.schema.loader.SchemaLoader.load(SchemaLoader.java:53) [shardingsphere-infra-common-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.mode.metadata.MetaDataContextsBuilder.addSchema(MetaDataContextsBuilder.java:78) [shardingsphere-mode-core-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.mode.manager.ContextManager.buildChangedMetaDataContext(ContextManager.java:446) [shardingsphere-mode-core-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.mode.manager.ContextManager.alterRuleConfiguration(ContextManager.java:259) [shardingsphere-mode-core-5.1.0.jar:5.1.0]
    at com.demo.module.config.sharding.ShardingAlgorithmTool.updateShardRuleActualDataNodes(ShardingAlgorithmTool.java:246) [classes/:na]
    at com.demo.module.config.sharding.ShardingAlgorithmTool.actualDataNodesRefresh(ShardingAlgorithmTool.java:162) [classes/:na]
    at com.demo.module.config.sharding.ShardingAlgorithmTool.tableNameCacheReload(ShardingAlgorithmTool.java:101) [classes/:na]
    at com.demo.module.config.sharding.ShardingAlgorithmTool.createShardingTable(ShardingAlgorithmTool.java:280) [classes/:na]
    at com.demo.module.config.sharding.ShardingAlgorithmTool.getShardingTableAndCreate(ShardingAlgorithmTool.java:74) [classes/:na]
    at com.demo.module.config.sharding.TimeShardingAlgorithm.doSharding(TimeShardingAlgorithm.java:66) [classes/:na]
    at org.apache.shardingsphere.sharding.algorithm.sharding.classbased.ClassBasedShardingAlgorithm.doSharding(ClassBasedShardingAlgorithm.java:87) [shardingsphere-sharding-core-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.sharding.route.strategy.type.standard.StandardShardingStrategy.doSharding(StandardShardingStrategy.java:68) [shardingsphere-sharding-core-5.1.0.jar:5.1.0]
    at org.apache.shardingsphere.sharding.route.strategy.type.standard.StandardShardingStrategy.doSharding(StandardShardingStrategy.java:57) [shardingsphere-sharding-core-5.1.0.jar:5.1.0]



具体报错的代码

具体代码路径
C:/Users/admin/.m2/repository/org/apache/shardingsphere/shardingsphere-infra-common/5.1.0/shardingsphere-infra-common-5.1.0.jar!/org/apache/shardingsphere/infra/metadata/schema/builder/loader/TableMetaDataLoaderEngine.class:76

img

我的初步思路就是

不影响执行, 动态修改上下文配置出现空指针,暂时没有找到具体的空指针原因, 还是我的依赖包有问题, 又遇到相同问题的可以一起探讨一下

  • 这篇博客: ShardingSphere实现本地注册中心,动态刷新actualDataNodes中的 步骤1 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 在resources/META-INF/services下建立文件org.apache.shardingsphere.orchestration.reg.api.RegistryCenter
    • 建立类com.changan.carbond.shardingjdbc.LocalRegistryCenter
    • 文件中的内容 com.xstudio.shardingjdbc.LocalRegistryCenter和上述类保持一致【SPI注册】