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中:

     


protocol="dubbo" group="billing" version="1.0.0" />
   

    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配置



你可能感兴趣的:(springboot,dubbo,@transactional)