首页
登录 | 注册

springboot+dubbo框架下服务注册时不能创建bean对象

服务注册的两种方式:

1.直接用dubbo提供的注解@Service

   但是这种方式加事务注解@Transactional时注册服务会失败,解决方式一种是改dubbo注解的源码(这种没有试过),另一种方式是手动控制事务的创建和提交

       //获取Spring容器的对象
       // WebApplicationContext contextLoader = ContextLoader.getCurrentWebApplicationContext();
        ApplicationContext contextLoader=SpringUtil.getApplicationContext();
        //设置属性的默认属性
        DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
        //设置事务的传播行为,此处是设置为开启一个新事物
        definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        //设置事务的隔离级别,此处是读已经提交
        definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
        //从spring容器对象中获取DataSourceTransactionManager,这个根据配置文件中配置的id名(transactionManager)
        DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) contextLoader.getBean("transactionManager");
        //获取事务状态对象
        TransactionStatus transactionStatus = (TransactionStatus) transactionManager.getTransaction(definition);

//处理业务

TODO。。。

//处理业务结束提交事务       

transactionManager.commit(transactionStatus);

       //事务异常是回滚

transactionManager.rollback(transactionStatus);

2.用配置xml的方式

xml中可以定义dubbo的protocol ,service和注入自己实现类的bean

       application.properties中定义application.name,zookeeper,scan,例如:

      dubbo.xml中:

     <!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="16372" />
<!-- 用户服务接口 -->
<dubbo:service interface="com.youedata.billingService.service.BillingService" ref="billingService" 
protocol="dubbo" group="billing" version="1.0.0" />
    <bean id="billingService" class="com.youedata.billingService.service.impl.BillingServiceImpl" />

    application.properties中

   spring.dubbo.application.name=billing-Service
   spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
   spring.dubbo.scan=com.youedata.billingService

注意事情引用服务的时候记得group和version要一致

dubbo.xml中可以加zookeeper的配置,但是properties中不能去否则报错,properties文件中加name和protocol配置不起作用

启动类里引用dubbo.xml配置




相关文章

  • 源码|详解分布式事务之 Seata-Client 原理及流程
    前言 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案.自年初阿里开源了Fescar(四月初更名为Seata)后,该项目受到了极大的关注,目前已接近 8000 Star.Seata 以高性能和零侵入的特性为目 ...
  • 提升不止一点点,Dubbo 3.0 预览版详细解读
    Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网.网易考拉等互联网公司,也不乏中国人寿.青岛海尔等大型传统企业.更多用户信息,可以访问Dubbo @GitHub,issue#1012: Wa ...
  • Fish Redux中的Dispatch是怎么实现的?
    零.前言 我们在使用fish-redux构建应用的时候,界面代码(view)和事件的处理逻辑(reducer,effect)是完全解耦的,界面需要处理事件的时候将action分发给对应的事件处理逻辑去进行处理,而这个分发的过程就是下面要讲的 ...
  • 字符串: 字符串用单引号(')或双引号(")括起来,不可变 1,find通过元素找索引,可切片,找不到返回-1 2,index,找不到报错. 3,split 由字符串分割成列表,默认按空格. 4,captalize 首字母大写,其 ...
  • 前端基础---JS基础
    背景介绍 Javascript 是一种运行在客户端的脚本语言 应用场景: 1.网页特效 2.服务端开发(Node.js) 3.命令行工具(Node.js) 4.桌面程序(Elextron) 5.APP(Cordova) 6.控制硬件-物联网 ...
  • 云原生的新思考,为什么容器已经无处不在了
    4月24日,中国信息通信研究院主办的首届云原生产业大会在北京举行,在<云原生数字引领未来>的主题演讲中,阿里云容器服务总监易立表示:"云原生不但可以很好的支持互联网应用,也在深刻影响着新的计算架构.新的智能数据应用.以 ...

2020 jeepshoe.net webmaster#jeepshoe.net
13 q. 0.275 s.
京ICP备10005923号