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

在实施pii数据加密解密过程中,由于使用了Shardingsphere并结合动态数据源,导致服务启动时出现由于ShardingSphereDataSource被final修饰无法生成CGLIB子类的错误。问题源于opentracing对jdbc的cglib增强。通过深入调查,发现是opentracting的依赖影响了ShardingSphereDataSource。最终,通过在Spring配置中禁用opentracing对jdbc的增强(opentracing.spring.cloud.jdbc.enabled=false)解决了问题,使得项目成功启动,并能在需要的地方切换pii数据源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

做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数据源的地方加动态数据源注解切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值