Spring事务管理

Spring事务管理,第1张

Spring事务管理

原理:使用的AOP编程,动态代理实现的。@Controller、@Service注解的类在IOC容器中以代理类的形式存在。当去执行业务方法时,放到了代理逻辑算法模板中执行。

  1. Jdbc编程一般是先获取数据库连接,执行SQL,提交事务,关闭连接,如果执行业务上出现异常,还要回滚事务。Jdbc编程存在很多的冗余代码,而且业务代码结构也不很明朗
  2. 通过xml配置或注解@Transactional和@EnableTransactionManagent开启事务管理
  3. 事务失效:
    1. 业务层方法如果是非public方法或static方法,事务就会失效

在没有事务管理的方法里面,通过this自调用的方式,调用有事务管理的方法 ,这个时候有事务管理的方法也没有事务管理了,这个时候并不存在代理对象调用

数据库相关知识
  1. 事务特性:ACID-原子性、一致性、隔离性、持久性
  2. 隔离级别:
    1. 未提交读:事务1对数据库的修改还未提交,事务2就能读到修改后的结果,衍生出脏读的问题
    2. 提交读:事务1对数据的修改只有提交了,事务2才能读到修改后的结果,否则读到的还是修改前的结果,衍生出不可重复读问题:前后两次读取到的结果不一样
    3. 可重复读:事务1对数据修改,未提交事务,事务2读取到的数据是修改前的值,事务1提交事务,事务2读取到的数据还是修改前的值。Mysql就是可重复读隔离级别
    4. 序列化:所有的事务都串行执行,读写事务都串行执行,性能低
    5. Mysql数据库隔离级别是可重复读,oracle数据库隔离级别是提交读
  3. 事务传播行为:总共有7种
    1. REQUIRED:事务存在就使用当前事务,事务不存在,就新创建事务
    2. SUPPORTS:事务存在就使用当前事务,事务不存在就不使用事务
    3. REQUIRES_NEW:每次都会创建新的事务

NESTED:事务套嵌,内部事务出现异常时,外部的事务不用回滚,只做内部事务回滚即可

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5697817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存