spring事务管理
四大特性
1.原子性:事物要么全部执行,要么全部回滚
2.隔离性:每一个事物都有自己的缓存区,事物之间相互不影响。
3.持久性:事物可以将数据持久化。
4.一致性:使数据库从一个一致性状态变换到另一个一致性状态,事物执行之前和执行之后都
一、 隔离行为:
1. islocation,首先先来说隔离行为的目的:
1).为了有效防止脏读,重复读,幻读。
2).为了在提高安全的前提下同时提高其性能。
2.什么是脏读、重复读、幻读?
1). 脏读:
是指一个事物读取了另一个事物未提交的数据。即事务A为查询操作还为提交,事务B这时执行了增加操作 也还为提交,事务A这时查询的结果为事务B增加的数据。
2.)重复读:
是指一个事物多次读取同一数据,但是在多次读取之间,有另一个事物提交,将数据修改了,这就造成我 们多次读取的结果并不都是一样的。
3.)幻读:
是指第一个事物对全部数据行进行了修改,这时第二个事物插入了新的一行数据,这时候我们第一个事物再 去查询刚刚修改的全部数据时,便会发现还没有修改的数据。
隔离级别为4种:
Read_nocommit 什么都不可以防止
Read_commit 可以防止脏读,不可防止重复读和幻读。
repeatable_read 可以防止脏读和重复读
Serilazible 可防止脏读和重复读和幻读
(因为程序一般都是在多线程环境下进行的,会存在多个事务并发进行,如果隔离级别选择Serilazibel,则相当于将操作
的数据加上了锁机制,这时事务便会依次执行,虽然这样可以防止脏读、幻读、重复读,但是对于性能方面便会大大降
低,mysql默认的隔离级别为Read_commit。)
二、传播行为
propagation
1.propagation_required 当前没有事务变创建一个事务,如有有则使用
2.propagation_supports 支持当前事务,有则使用,没有则不使用
3. propagation_mandatory 支持当前事务,有则使用,没有则抛出异常
4.propagation_requires_new 无论有没有,都创建新事务
5.propagation_not_supported 非事务方式提交,有则挂起该事务
6.propagation_never 非事务提交,有则抛出异常
7.propagation_nested 存在事务,在嵌套事务内执行,没有,则创建一个事务
三、@Transcational
注解的属性:
1.readOnly 为true表示只读,false,可以读写,默认为false
2.islocation 隔离行为,mysql默认为Read_commit
3.propagation 传播行为,默认为propagation_required
4.timeout 事物超时时间,默认-1,永不超时
5.rollbackfor 回滚抛出异常数组该,rollbackFor=RuntimeException.class,则事物回滚
6.roallbackForClassName 抛出异常类名称数组,rollbackForClassName={"RuntimeException",Exception},回
滚事物
7.norollback 抛出该异常数组名称,rollbackForClassName={"RuntimeException",Exception},不进行回滚事物
更多java技术请关注微信公众号: