Spring声明式事务
2016-04-25 17:24
721 查看
Spring声明式事务
1.事务的概念简单来说就是一个原子操作,要么操作中的几个动作全部执行,要么全部不执行。
2.ACID(原子性,一致性,隔离性和持久性)是事务应该满足的条件,但是一般来说隔离性才是程序员应该做的,因为隔离性其实就是对并发的控制,而经常提及的数据的脏读,幻读等都是并发引起的。
3.事务在代码中使用; 接着上篇文章配置好的Spring+Hibernate的环境:
4.事务的传播特性:propagation属性
默认情况下的属性是REQUIRES;如果一个事务方法A,依次包含事务方法B和事务方法C,那么默认情况下当执行A的时候,B和C就会在A的事务中运行, 假设运行到C的时候出现异常,进行回滚,这个事务A都会回滚,B进行的操作就会无效。 如果希望B操作依然是有效的,那就给B配置REQUIRES_NEW属性,即在A中也会开辟新事务,这样当C出错的时候,B的操作依然有效,因为它在执行到C之前已经提交了。 当然如果B和C调换一下,先执行C,那么给B设置这个属性,B中操作也是无效的,因为C已经出错了。
5.其他属性
指定事务的隔离级别:isolation属性,指定隔离的级别,不同级别解决相应的问题,针对之前提到的重复读,脏读等问题。
超时回滚:timeout属性 指定事务一段时间内未执行完,强制回滚。
readonly属性:如果方法内都是只读的操作,数据库可以对其进行优化。
6.Spring默认情况下会对unchecked异常(RuntimeException--运行时异常)和error进行回滚,而对checked异常(编译器可以发现的,可以用try catch进行捕获的)不做回滚。想让其进行回滚的话 1)在try catch中抛出一个自定义的运行时异常 2)配置checked异常时也进行回滚,@Transactional(rollbackFor=Exception.class)
1.事务的概念简单来说就是一个原子操作,要么操作中的几个动作全部执行,要么全部不执行。
2.ACID(原子性,一致性,隔离性和持久性)是事务应该满足的条件,但是一般来说隔离性才是程序员应该做的,因为隔离性其实就是对并发的控制,而经常提及的数据的脏读,幻读等都是并发引起的。
3.事务在代码中使用; 接着上篇文章配置好的Spring+Hibernate的环境:
@Autowired private SessionFactory sessionFactory; private Session getSession(){ return sessionFactory.getCurrentSession(); } @Transactional public void insertData(){ User user = new User(); user.setCount(1); getSession().save(user); Book book = new Book(); book.setNum(2);4 book.setPrice(1); getSession().save(book); }如上图,在使用需要使用session时候(一般来说只在DaoImpl中使用),只要自动注入SessionFactory,用getCurrentSession获取即可; 一个方法如果需要表明是一个事务,也只需要加上@Transactionl注解即可。
4.事务的传播特性:propagation属性
@Transactional(propagation=Propagation.REQUIRES_NEW)
默认情况下的属性是REQUIRES;如果一个事务方法A,依次包含事务方法B和事务方法C,那么默认情况下当执行A的时候,B和C就会在A的事务中运行, 假设运行到C的时候出现异常,进行回滚,这个事务A都会回滚,B进行的操作就会无效。 如果希望B操作依然是有效的,那就给B配置REQUIRES_NEW属性,即在A中也会开辟新事务,这样当C出错的时候,B的操作依然有效,因为它在执行到C之前已经提交了。 当然如果B和C调换一下,先执行C,那么给B设置这个属性,B中操作也是无效的,因为C已经出错了。
5.其他属性
指定事务的隔离级别:isolation属性,指定隔离的级别,不同级别解决相应的问题,针对之前提到的重复读,脏读等问题。
超时回滚:timeout属性 指定事务一段时间内未执行完,强制回滚。
readonly属性:如果方法内都是只读的操作,数据库可以对其进行优化。
6.Spring默认情况下会对unchecked异常(RuntimeException--运行时异常)和error进行回滚,而对checked异常(编译器可以发现的,可以用try catch进行捕获的)不做回滚。想让其进行回滚的话 1)在try catch中抛出一个自定义的运行时异常 2)配置checked异常时也进行回滚,@Transactional(rollbackFor=Exception.class)
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- SQL Server误区30日谈 第1天 正在运行的事务在服务器故障转移后继续执行
- 浅析SQL Server中包含事务的存储过程
- Mysql中的事务是什么如何使用
- MySql的事务使用与示例详解
- C#分布式事务的超时处理实例分析
- C#中的事务用法实例分析
- SQL Server的事务操作隔离模式介绍
- MySQL中事务概念的简洁学习教程
- C#处理Access中事务的方法
- oracle 合并查询 事务 sql函数小知识学习
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘