springboot集成dubbo时@Transactional问题

背景:
以前项目使用spring集成dubbo,dubbo通过xml配置文件的方式配置服务,使用@Transactional没有问题,后来通过dubbo的@service注解简化配置,但是发现有@Transactional注解的服务不能通过dubbo的@service发布服务,消费端通过@Reference找不到服务就报错了。

问题分析:
通过百度发现在使用@Transactional时spring会为这个类生成一个代理类,这个代理类有两种生成方式。一种是jdk动态代理,一种是CGLib动态代理。
jdk动态代理生成的代理类与当前类共同实现相同的接口,所以与当前类也只是间接调用的关心,不在此次讨论范围。
CGLib生成的代理类为当前Service的子类,可以集成到当前Service的注解。
然后dubbo的@service注解中没有@Inherited(是否可以被继承),即他无法被继承所以新的代理类就相当于没有使用@service这个注解,所以无法发布服务。

问题解决:
网上很多的解决方案还是基于dubbo2.5.X,dubbo还没有解决这个问题,但是在dubbo2.6.0以上dubbo官方已经修复了这个问题,但是如果这样还是不行,还需要在application.properties中添加配置spring.aop.proxy-target-class=false

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值