关于spring的事务传播特性,spring常用事务传播行为
00-1010为什么需要事务Spring来声明事务事务参数描述propagationisolationtimeout事务回滚失效解决方案@事务工作原理为什么需要Spring事务的事务传播机制?沟通机制的类型
00-1010事务是将一组操作封装成一个执行单元,要么全部成功,要么全部失败。如果没有事务,传输操作就会异常,所以需要保证原子性。
00-1010只能通过在方法中添加@Transactional注释来实现。不需要手动启动和提交事务,如果中途出现异常,事务会自动回滚。@Transactional既可以修饰方法也可以修饰类,修饰方法只能修饰公共方法。注意:@Transactional在捕获到异常的情况下,事务不会自动回滚@ Transactional(isolation=isolation . read _ committed)//open Transaction @ request mapping(/insert )public int insert(){ userinfo userinfo=new userinfo();userinfo . setname( AOP );userinfo . set password( 123456 );返回userservice . add(userInfo);} @ transactional(isolation=isolation . read _ committed)//open transaction @ request mapping(/insert 2 )public int insert 2(){ userinfo userinfo=new userinfo();userinfo . setname( AOP );userinfo . set password( 123456 );int result=userservice . add(userInfo);system . out . println( MySQL影响的行数: result );int num=10/0;返回结果;}
目录
00-1010事务的传播行为,默认为传播。需要
为什么需要事务
Spring有五个隔离级别,MySQL有四个隔离级别,Spring多了一个默认,主要针对连接数据库的事务隔离级别。
00 -1010表示事务超时,默认值为-1。如果事务执行时间超过超时,将自动回滚。
00-1010直接抛出异常
@ transactional(propagation=propagation . required)//open transaction @ request mapping(/insert 2 )public int insert 2(){ userinfo userinfo=new userinfo();userinfo . setname( AOP );userinfo . set password( 123456 );int result=userservice . add(userInfo);system . out . println( MySQL影响的行数: result );请尝试{ int num=10/0;}catch(异常e){ result=0;e . printstacktrace();扔e;//解决事务失效问题//TransactionAspectSupport。CurrentTransactionStatus()。SetRollBackOnly();}返回结果;}使用catch中的代码手动回滚事务。
@ transactional(propagation=propagation . required)//open transaction @ request mapping(/insert 2 )public int insert 2(){ userinfo userinfo=new userinfo();userinfo . setname( AOP );userinfo . set password( 123456 );int result=userservice . add(userInfo);system . out . println( MySQL影响的行数: result );请尝试{ int num=10/0;}catch(异常e){ result=0;e . printstacktrace();//抛出e;//解决事务失效问题TransactionAspectSupport。CurrentTransactionStatus()。SetRollBackOnly();}返回结果;}
Spring 声明事务
@Transactional基于AOP实现,使用动态代理实现。如果目标对象实现接口,默认情况下将采用JDK的动态代理。如果目标对象没有实现接口,将使用CGLIB动态代理。
@Transactional在开始业务之前,通过代理打开交易,执行成功后再提交交易。如果中途遇到异常,事务将回滚。
00-1010定义:当多个事务在Spring中互相调用时,它们是如何表现的?
00-1010事务的隔离级别保证了多个并发事务的可控性(稳定性),而事务传播机制则保证了一个事务在多个调用方法之间的可控性。
Transactional参数说明
嵌套事务和联接事务的区别
如果整个交易执行成功,则两个交易的结果相同;如果事务执行中途失败,加入事务后将回滚整个事务;但是,嵌套事务将在本地回滚,这不会影响前面方法中执行的结果。关于Spring对事务和事务传播机制的超详细解释的这篇文章到此为止。有关春季交易的更多信息,请搜索《大众IT》的往期文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。