原子性 一致性 隔离性 持久性
保证多条SQL语句同生共死
一、spring的事务
spring的事务可以加载任意位置 ,使用起来比较方便
1.注解式:在方法的头上加上 @Transactional
2.配置式:
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" rollback-for="java.lang.RuntimeException"/>
<tx:method name="insert*" ></tx:method>
<tx:method name="update*" ></tx:method>
<tx:method name="delete*" ></tx:method>
</tx:attributes>
</tx:advice>
<!--使用aop将事务添加上方法上-->
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.qianfeng.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
二、spring事务的属性
1.propagation
事务的传播行为 A方法调用B方法, A方法是外层方法
写在内层方法上
REQUIRED : 外层方法如果有事务, 内存方法会合并到外城方法的事务上
NESTED : 外层方法事务, 同时都保留 , 如果外层方法内报错了, 整体回滚, 内层方法报错, 自己回滚
REQUIRES_NEW : 不管外层方法怎么样, 内层放都用自己的事务, 挂起外层的事务
2.isolation
default (默认值)(采用数据库的默认的设置) (建议)
read-uncommited 读未提交
read-commited 读提交 (Oracle数据库默认的隔离级别)
repeatable-read 可重复读 (MySQL数据库默认的隔离级别)
serialized-read 序列化读
3.timeout
事务超时时间
-1 : 使用数据库默认的超时时间
100 : 具体值, 单位秒
4.readOnly
暗示数据库本次请求是查询
生不生效要看数据库支不支持 mysql支持, orcle 不支持 , 舍不舍无所谓
使用支持的数据库是, 如果在修改中设置为ture,会报错
5.rollback-for
这时一个异常类型, 小于等于类型小的可以触发回滚
6.no-rollback-for
某个异常下不回滚
7.@Autowired, @Resource
Autowired 是按照类型注入
Resource 是按照名称注入
实际上用哪个都一样