shardingsphere数据源踩坑记录。CGLIB问题

背景:

做pii数据加密解密,要对代码无侵入,采用了shardingsphere的技术

改造方案:

在原来动态数据源的基础上引入shardingsphere数据源。动态数据源里之前有A,B两个数据源。将A,B两个数据源经过shardingsphere处理成pii数据源C,D。再放回动态数据源里

问题:

将数据源处理成shardingsphere数据源时,服务启动报错。错误信息:

Could not generate CGLIB subclass of class org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource

问题排查:

ShardingSphereDataSource是final修饰的,无法生成cglib对象导致报错,又不能禁掉cglib。否则mysql的事务会报错。所以问题原因定位在为啥会给ShardingSphereDataSource生成cglib对象

通过一步一步打断点,走spring加载bean的过程,发现是opentracting对jdbc进行了cglib增强。我们的链路追踪有用到opentracting的依赖,影响到了ShardingSphereDataSource。

解决方案:

在spring官网查询,发现可以单独禁用opentracting对jdbc的cglib增强。需要在在properties或yaml文件里加以下配置即可。不过最好在properties里加,yaml文件可能不生效:

opentracing.spring.cloud.jdbc.enabled=false

之后项目成功启动了,在要使用pii数据源的地方加动态数据源注解切换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值