JDBC的事务
Spring 事务管理
前景介绍:
a)我先创建了一个书店买书的例子(用户买书,库存要变,用户的余额也要变)
b)并对库存和用户余额做了自定义异常处理
买书的步骤:1.获取书的单价 2.更新书的库存 3.更新用户余额
当用户余额不足时,按理说书的库存不会发生变化;但事实是库存发生了变化
这个时候就需要事务管理
说明:因为mysql识别不了 检查约束,所以要自己在相应的位置做限定
详细例子: E:\student\java\java框架学习\Spring\Spring-3
声明式事务 属性讲解:
/**
* 1.使用propagation 指定事务的传播行为,即当前的事务方法被另外一个事务方法调用时
* 如何使用事务,默认取值为REQUIRED。即使用调用方法的事务
* @Transactional(propagation=Propagation.REQUIRED)
* 如果有事务在运行,当前的方法就在这个事务内运行,否则就启动一个新的事务,并在自己的事务内运行
* @Transactional(propagation=Propagation.REQUIRES_NEW)
* 当前的方法必须启动新事务,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起
* 2.使用isolation 指定事务的隔离级别,最常用的取值为READ_COMMITTED
* 3.默认情况下Spring 的声明式事务对所有的运行时异常进行回滚,也可以通过对应的
* 属性进行设置,弹出情况下 取默认值即可
* noRollbackFor={UserAccountException.class} 对这个异常不进行回滚
* rollbackFor: 遇到时必须进行回滚
* 4.使用readOnly指定事务是否只读,表示这个事务只读数据但不更新数据,这样可以帮助
* 数据库引擎优化事务。若真的有一个只读数据库值的方法,应设置readOnly=true;
* 5.使用timeout 指定强制回滚之前事务可以占用的时间。这样可以防止长期运行的事务占用资源.
*/
以XML的形式 配置事务管理