项目启动时人大金仓数据库在shardingsphere4.1.1版本中创建sharding数据源报错

事故现场

项目启动时报错如下

事故排查

创建sharding数据源时,默认会加载数据库中所有表的元数据。在加载元数据的逻辑中经过debug发现“罪魁祸首”(背锅的)是项目数据库里一张名为sys_user的表,因为人大金仓数据库里同样有一张名为sys_user的内置表。具体细节如下

解决方案

在创建sharding数据源时不加载sys_user的元数据,避免上面会报错的逻辑。因为分析项目情况后发现其实并没有必要加载数据库中所有表的元数据,只需要加载项目配置的逻辑表的元数据就行(sys_user恰恰不在配置的逻辑表里),这同时也大大节省了创建sharding数据源的时间。具体细节如下

自定义ShardingRule

public class LocalShardingRule extends ShardingRule {
    public LocalShardingRule(ShardingRuleConfiguration shardingRuleConfig, Collection<String> dataSourceNames) {
        super(shardingRuleConfig, dataSourceNames);
    }

    @Override
    public Optional<String> findActualDefaultDataSourceName() {
        return Optional.empty();
    }
}

创建ShardingDataSource时使用自定义的ShardingRule

return new ShardingDataSource(dataSourceMap, new LocalShardingRule(shardingRuleConfig, datasourceNames), properties);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值