怎么在spring中使用atomikos实现分布式事务

怎么在spring中使用atomikos实现分布式事务?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

成都创新互联主要从事网站设计制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务宜章,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

项目结构

怎么在spring中使用atomikos实现分布式事务

从web.xml中可以知道,容器只加载了appliactionContext.xml,剩下的配置文件除了database.properties外都是无用文件,所以大家如果要在项目中配置的话,仅需要把appliactionContext.xml中关于atomikos的部分新增到自己项目中就OK了

appliactionContext.xml



  
  
  
  
  
    
    
    
      
        ${mysql.qa.db.url}
        ${mysql.qa.db.user}
        ${mysql.qa.db.password}
      
    
    
    
    
    
  

  
  
    
    
    
      
        ${oracle.qa.db.url}
        ${oracle.qa.db.user}
        ${oracle.qa.db.password}
      
    
    
    
    
    
  

  
    
    
    
      
        classpath*:/dao/*.xml
      
    
  
  
    
    
    
      
        classpath*:/daodev/*.xml
      
    
  

  
  
    
    
  
  
    
    
  

  
  
    
  
  
    
  
  
    
    
  

  
  
  
  
  

  
  

适用JUnit4进行单元测试

package com.xy.controller;

import com.xy.daodev.TransactionTestService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TransactionTestMain extends AbstractJUnit4SpringContextTests {
  @Autowired
 private TransactionTestService transactionTestService;
 
 /**
 * 在同一事务有多个数据源
 */
 @Test
 public void multipleDataSource2() {
 transactionTestService.updateMultipleDataSource("1","1", 100L,"1.6");
 }
}

业务实现,当前没有异常操作

@Service
public class TransactionTestServiceImpl implements TransactionTestService {
  @Autowired
 @Qualifier("mysqlTransactionTestDao")
 private MysqlTransactionTestDao mysqlTransactionTestDao;
 
 @Autowired
 @Qualifier("transactionTestDao")
 private TransactionTestDao transactionTestDao;
 
 /**
 * 在同一事务有多个数据源
 */
 @Override
 @Transactional
 public void updateMultipleDataSource(String deUserId, String inUserid, long money,String str) {
 // 账户1转出操作
 mysqlTransactionTestDao.decreaseMoney(deUserId, money);
  //Integer.parseInt(str);
 // 账户2转入操作
 transactionTestDao.increaseMoney(inUserid, money);
 
 } 

}

mysql模拟金额转出,oracle模拟金额转入


  UPDATE fx1 SET amount=amount - #{1,jdbcType=BIGINT} WHERE id=#{0,jdbcType=VARCHAR}

  UPDATE fx1 SET amount=amount + #{1,jdbcType=BIGINT} WHERE id=#{0,jdbcType=VARCHAR}

mysql初始金额

怎么在spring中使用atomikos实现分布式事务

oracle初始金额

怎么在spring中使用atomikos实现分布式事务

执行正常操作

怎么在spring中使用atomikos实现分布式事务

mysql当前金额

怎么在spring中使用atomikos实现分布式事务

oracle当前金额

怎么在spring中使用atomikos实现分布式事务

将被屏蔽的制造异常的代码打开

public void updateMultipleDataSource(String deUserId, String inUserid, long money,String str) {
 // 账户1转出操作
 mysqlTransactionTestDao.decreaseMoney(deUserId, money);
  Integer.parseInt("skg");
 // 账户2转入操作
 transactionTestDao.increaseMoney(inUserid, money);
}

发现mysql和oracle的当前金额都没有变化,说明事务回滚成功,查看日志

怎么在spring中使用atomikos实现分布式事务

关于怎么在spring中使用atomikos实现分布式事务问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


名称栏目:怎么在spring中使用atomikos实现分布式事务
网站网址:http://azwzsj.com/article/jcheoi.html