Spring事务传播行为是什么?怎么用?其实这些困扰都可以总结成一个问题,即Spring事务传播行为的实现方式,下面我们运用实例来展示Spring事务传播行为的实现方式。
在成都网站建设、成都网站制作中从网站色彩、结构布局、栏目设置、关键词群组等细微处着手,突出企业的产品/服务/品牌,帮助企业锁定精准用户,提高在线咨询和转化,使成都网站营销成为有效果、有回报的无锡营销推广。创新互联专业成都网站建设十年了,客户满意度97.8%,欢迎成都创新互联客户联系。假如有两个方法A和B,A调用B,这两个方法上都加了事物,究竟使用哪个事物?
Public void A(){
B();
}
这就是spring事物传播行为要解决的问题。
在spring中有七种事务传播行为。
简单介绍一下这七种方式(如果不懂不用纠结,后面详细介绍)
常用:
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中,一般的选择(默认值)
REQUIRES_NEW : 新建事务,如果当前在事务中,把当前事务挂起。
我们重点介绍一下常用的两种:
一:
数据访问层:
@Repository("accountDao")
public class AccountDaoImpl{
updateAccount(Account account) { jdbcTemplate.update(,account.getMoney(),account.getId()); }
}
业务逻辑层:
@Service("accountService")
public class AccountServiceImpl{
@Transactional(propagation=Propagation.REQUIRED)
transfer(Account source, Account target, Float money) { source.setMoney(source.getMoney()-money);target.setMoney(target.getMoney()+money);.updateAccount(source); .updateAccount(target); }
@Transactional(propagation=Propagation.REQUIRED)
transferException(Account source, Account target, Float money) { source.setMoney(source.getMoney()-money);target.setMoney(target.getMoney()+money);.updateAccount(source); i=1/0; .updateAccount(target); }
}
测试:
@Test public voidtestDo(){ serviceImpl.transfer("%张%","%李%",1000f);
serviceImpl.transferException ("%张%","%李%",2000f);
int I = 1/0; }
现在测试的方法testDo上没有加事务,当它调用serviceImpl.transfer()方法的时候,因为transfer使用REQUIRED修饰,所以transfer会新建一个事务,自己独立在该事务执行,成功转账1000,张三账户1000,李四4000。当调用serviceImpl.transferException时新建事务,在执行该方法时发生异常,事务回滚,所以转账不成功,张三账户1000,李四4000,此时这两个方法都是在自己的事务中独立执行。
@Test
public voidtestDo(){ serviceImpl.transfer("%张%","%李%",1000f);
serviceImpl.transferException ("%张%","%李%",2000f);
}
当它调用serviceImpl.transfer()方法的时候transfer方法和transferException方法加入到testDo方法的事务中,他们都在一个事务,当发生异常的时候事务回滚,转账1000和2000都不成功,张三账户2000,李四3000。
二::
测试:
@Test public voidtestDo(){ serviceImpl.transfer("%张%","%李%",1000f);
serviceImpl.transferException ("%张%","%李%",2000f);
int I = 1/0; }
关于Spring事务传播行为的实现方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。