1.怎么用spring开启事务
事务是什么:事务仅与数据库相关,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务。事务必须服从ISO/IEC所制定的ACID原则。
ACID原则 | 备注 |
---|---|
原子性 | 指整个事务是不可以分割的工作单元。表示事务执行过程中的任何失败都将导致事务所做的任何修改失效 |
一致性 | 指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。 |
隔离性 | 指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。 |
持久性 | 指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。表示已提交的数据在事务执行失败时,数据的状态都应该正确。 |
为什么要使用事务:事务是为了解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。
比如:
银行的转账业务,账户A要将自己账户上的666转到账户B下面,A账户余额首先需要减去666元,然后B账户要增加666元,假如中间网络出现了问题,A账户减去666元已经结束,B因为网络中断而操作失败,那么整个业务失败,必须要做出控制保证业务的正确性,这个时候就需要事务,要么全部执行成功,要么操作全部撤销,这样就保证了数据的安全性。
java 事务类型
名称 | 描述 |
---|---|
JDBC事务 | |
JTA(java Transaction API)事务 | |
容器事务 | 主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。 |
spring开启事务
- 在启动主类添加注解:@EnableTransactionManagement 来启用注解式事务管理,相当于之前在xml中配置的<tx:annotation-driven />注解驱动。
- 在需要事务的类或者方法上面添加@Transactional(rollbackFor = Exception.class)注解,里面可以配置需要的粒度
- 在逻辑上如果需要手动回滚则加入下代码
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
2.spring自动装配
什么是自动装配:自动配装是指在使用SpringBoot的时候,会自动将Bean装配到IoC容器中。例如我们在使用Redis数据库的时候,会引入依赖spring-boot-starter-data-redis。在引入这个依赖后,服务初始化的时候,会将操作Redis需要的组件注入到IoC容器中进行后续使用
过程:1.获取到组件(例如spring-boot-starter-data-redis)META-INF文件夹下的spring.factories文件
2.spring.factories文件中列出需要注入IoC容器的类
4.将实体类注入到IoC容器中进行使用