使用Dubbo注解与spring事物注解冲突解决方法
1.ServiceImpl类中注解配置服务实现类上使用的Service注解是Dubbo提供的,用于对外发布服务
import com.alibaba.dubbo.config.annotation.Service;
2.ServiceImpl引用Dubbo service注解的属性必须声明interfaceClass属性
@Service(interfaceClass=CheckItemService.class)
3.Controller注解注Service服务时使用的是Dubbo提供的@Reference注解不用@Autowired ,@Reference 用在消费端,表明使用的是服务端的什么服务。注入的是分布式的远程服务的对象。在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数:性能好的多调用些、一致性Hash:商品id%集群的总数==0-2),缺省为random随机调用。将check值改为false来关闭检查依赖的服务是否可用。
@Reference(check = false,loadbalance = "random")
4.Spring事物注解proxy-target-class设置为ture
<!--
开启事务控制的注解支持
注意:此处必须加入proxy-target-class="true",
需要进行事务控制,会由Spring框架产生代理对象,
Dubbo需要将Service发布为服务,要求必须使用cglib创建代理对象。
-->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true"/>
</beans>