解决Dubbo无法发布被事务代理的Service问题
Dubbo
发生问题的原因
通过Dubbo提供的标签配置就可以进行包扫描,扫描到@Service注解的类就可以被发布为服务。
但是我们如果在服务提供者类上加入@Transactional事务控制注解后,发布服务就不成功了。
因为事务控制的底层原理是为服务提供者类创建代理对象,
默认的情况下Spring是基于JDK动态代理方式来创建对象,
而此时代理类的完整类名为com.sun.proxy.*******,
导致Dubbo发布服务前进行包匹配无法完成匹配,进而没有进行服务的发布。
解决方案
1)修改application.xml配置文件,开启事务控制注解支持时指定proxy-target-class属性,值为true。作用是使用cglib代理方式创建代理对象类。
2)修改xxxServiceImpl类,在@Service注解中加入interfaceClass属性,值为xxxService.class,作用是指定服务的接口类型。