代码中事务是如何控制的?

java中的事务主要有两种,JDBC事务(本地事物)和JTA(Java Transaction API)事务(分布式事物);
事务有四大特性ACID原子性、一致性、隔离性和持久性。框架中,我们一般把事物交给spring来管理。
spring配置事务的方式一般有两种,一个是声明式事务,一个是注解式事务。
注解事务,比较简单灵活,在spring配置文件中配置一个<tx:annotation-driven>的注解,然后在需要的方法上加@Transactional注解就可以了。
声明式事务,切点一般是扫描service层实现类,通过方法名匹配配置传播特性,决定哪些方法上加事务,哪些不需要事物。
事务主要有五大隔离级别和7种传播特性;五大隔离级别由低到高:主要控制是否出现脏读,不可重复读和幻觉读;7种传播特性主要决定是新建事务,还是取当前事务;
 

Ø 脏读:

指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

Ø 不可重复读:

 指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

Ø 幻觉读:

指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。
同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户

事物主要是为了保证一次操作里边涉及到多次增删改时,保证他们可以同步提交或回滚。他有四大特性ACID(原子性、一致性、隔离性、持久性)

1.    原子性(Atomicity:事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败。

2.    一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。当事务执行成功后就说数据库处于一致性状态。如果在执行过程中发生错误,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这是数据库就处于不一致状态。

3.    隔离性(Isolation):一个事务的执行过程中不能影响到其他事务的执行,即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。

4.    持续性(Durability):即一个事务执一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。

我们框架中一般都通过Spring的AOP去管理事物;常用两种有方式:声明式事物和注解式事物;

声明式事物就是通过在配置里边配置他的事物传播特性和切入点的方式实现;切入点我们一般扫描所有的service层的方法做为切入点;事物传播特性一般通过方法名称判断去使用只读事物还是可增删改事物;

注解式事物:在Spring配置文件里边开启以后,在需要事物增删改事物的方法上加上@Transactional注解就可以了;

事务的隔离级别也分为四种,四个级别可以逐个解决脏读、不可重复读、幻读这几类问题

 

7种事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播


猜你喜欢

转载自blog.csdn.net/panyuxin_/article/details/80814488