Spring 事务隔离与事务传播的详解与对比
程序员文章站
2023-11-07 19:22:40
spring 事务隔离与事务传播的详解与对比
spring是ssh中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下spring的事务管理。spring的...
spring 事务隔离与事务传播的详解与对比
spring是ssh中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下spring的事务管理。spring的事务管理分为声明式跟编程式。声明式就是在spring的配置文件中进行相关配置;编程式就是用注解的方式写到代码里。
spring配置文件中关于事务配置总是由三个组成部分,分别是datasource、transactionmanager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 datasource、 transactionmanager这两部分只是会根据数据访问方式有所变化,比如使用hibernate进行数据访问时,datasource实际为 sessionfactory,transactionmanager的实现为hibernatetransactionmanager。
spring的事务隔离级别
- isolation_default:使用数据库默认的隔离级别。
- isolation_read_uncommitted:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。
- isolation_read committed:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。
- isolation_repeatable_read:对相同字段的多次读取结果一致,可导致幻读。
- isolation_serializable:完全服从acid的原则,确保不发生脏读、不可重复读和幻读。
可以根据自己的系统对数据的要求采取适应的隔离级别,因为隔离牵涉到锁定数据库中的记录,对数据正性要求越严格,并发的性能也越差。
spring的事务传播行为
- spring事务的传播行为说的是当一个方法调用另一个方法时,事务该如何操作。
- propagation_mandatory:该方法必须运行在一个事务中。如果当前事务不存在则抛出异常。
- propagation_nested:如果当前存在一个事务,则该方法运行在一个嵌套的事务中。被嵌套的事务可以从当前事务中单独的提交和回滚。如果当前不存在事务,则开始一个新的事务。各厂商对这种传播行为的支持参差不齐,使用时需注意。
- propagation_never:当前方法不应该运行在一个事务中。如果当前存在一个事务,则抛出异常。
- propagation_not_supported:当前方法不应该运行在一个事务中。如果一个事务正在运行,它将在该方法的运行期间挂起。
- propagation_required:该方法必须运行在一个事务中。如果一个事务正在运行,该方法将运行在这个事务中。否则,就开始一个新的事务。
- propagation_requires_new:该方法必须运行在自己的事务中。它将启动一个新的事务。如果一个现有的事务正在运行,将在这个方法的运行期间挂起。
- propagation_supports:当前方法不需要事务处理环境,但如果一个事务已经在运行的话,这个方法也可以在这个事务里运行。
以上就是spring 事务隔离与事务传播的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: JSP中用回车监听按钮事件兼容火狐 IE等主流浏览器
下一篇: 支付宝小程序tabbar底部导航