spring声明式事务

声明式事务:

业务层的职能不仅仅是调用DAO这么简单,事务的处理是任何企业级应用开发中不能回避的一个重要问题.以往我们通过在业务方法中用编码的方式进行事务控制,这样的弊端显而易见:事务代码分散在业务方法中难以重用,需要调整时工作量也比较大;复杂事务编码不易实现,增加了开发难度.Spring提供了声明式事务处理机制,她基于aop实现,无须编写任何事物管理代码,所有个工作全在配置文件中完成.这意味着业务完全分离,配置即可用,降低了开发和维护难度.

事务的四大特性(ACID):

原子性:事务在执行过程中发生错误,会回滚到事务开始之前的状态,就像从来没执行过一样.
一致性:在一个事务执行之前和执行之后,数据库都必须处于一致性状态,执行成功,数据被系统有效应用,就是有效状态,执行中发生错误,就会回滚到原始状态.
隔离性:由并发事务所做的修改必须与其他并发事务所做的修改隔离.
持久性:事务成功结束,它对数据库所做的更新就必须保存下来,即使发生系统崩溃重新启动数据库,数据库还能恢复到事物成功结束时的状态.

事务的五大隔离等级(isolation):

DEFAULT:默认值,表示使用数据库默认的事务隔离等级.
READ_UNCOMMITTED:读未提交,允许脏读,不可重复读和幻读
READ_COMMITTED:读提交,禁止脏读,但允许不可重复读和幻读
REPEATABLE_READ:重复读,禁止脏读和不可重复读,单运行幻读.
SERIALIZABLE:串行读,禁止脏读,不可重复读和幻读,这是花费最高代价,但是最可靠的事务隔离等级.

脏读:一个事务读取了另外一个事务未提交的数据(会对系统的并发处理带来很大的隐患)
不可重复读:两个并发的事务,事务A在访问一个数据(并未提交事务),紧接着,事 务B修改了该数据,并提交了事务修改,事务A再次访问数据就会发现,数据已经改变.
幻读:举例说明:小红是银行的工作人员,一天,小红查询他老公的当月消费金额是80元,正在这时,小红的老公正在结账,刷出去100元,然后小红打印了他老公本月的消费账单发现是180元,这就是幻读.

事务的七大传播机制(propagation):

REQUIRED:默认值,表示如何让存在一个事务,则支持当前事务;如果当前没事务,则开启一个新的事务.(REQUIRED能够满足大多数事务需求, 可以作为首选的事务传播行为)
REQUIRES_NEW:表示总是开启一个新的事务如果一个事务已经存在,则将这个存在的事务挂起,开启新事务执行该方法.
MANDATORY:表示如果存在一个事务,则支持当前事务,如果当前没有事务则抛出异常.
NESTED:表示如果当前存在一个活动的事务,则创建一个事务作为当前事务的嵌套事务执行;如果当前没有事务,该取值与REQUIRED相同.
SUPPORTS:表示如果存在一个事务,则支持当前事务,如果当前没有事务,则按非事务提交.
NOT_SUPPORTS:表示总是以非事务方式执行.如果一个事务已经存在,则将这个存在的事务挂起,然后执行该方法.
NEVER:表示总是以非事务方式执行,如果当前存在一个活动的事务,则抛出异常.

声明式事务的注解方式…
悲观锁…
乐观锁…

你可能感兴趣的:(SSM框架)