spring事务
spring中管理事务的是事务管理器和他的实现类
spring事务是一个统一的模型
1.指定要使用的事务管理器的实现类bean
2.指定哪些类 哪些方法需要加入事务的功能
3.指定方法需要的隔离级别 传播行为 超时
告诉spring 你的项目中类的信息 方法的名称 方法的事务传播行为
事务隔离级别:
四个 默认是REPEATABLE_READ(mysql)
READ_UNCOMMITTED | 读未提交 未解决任何并发问题 |
---|---|
READ_COMMITTED | 读已提交 解决脏读 存在不可重复度和幻读 |
REPEATABLE_READ | 可重复读 解决脏读 不可重复度 存在幻读 |
SERIALIZABLE | 串行化 不存在并发问题 |
传播行为:控制业务方法是不是有事务 有什么样的事务
一共七个 表示你的业务方法调用时 事务的方法之间是如何使用的
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED_NEW
PROPAGATION_SUPPORTS
这三个需要用
PROPAGATION_MANDATORY
PROPAGATION_NESTED
PROPAGATION_NEVER
PROPAGATION_NOT_SUPPORTED
这四个基本不用
事务提交和回滚时机:
1.成功就执行完毕 没有抛出异常 spring在方法执行后提交事务 调用事务管理器用的是commit
2.如果失败了 就回滚 抛出异常或者error 调用事务管理器的事rollback
3.当你的业务方法抛出了非运行异常 主要是受查异常时 提交事务
受查异常:在你编写代码时 必须处理的异常
默认受到受查异常时候 是提交事务的 但是也可以自己设置异常回滚
spring框架中提供的事务处理方法:
1.适合中小型项目使用 注解方案:
spring框架自己用aop实现给业务增加事务功能 使用@Transactional注解增加事务 这是spring自己的注解 方法public上面 表示当前方法具有事务 可以给注解属性赋值 设置隔离级别 传播行为 异常信息
使用步骤:声明事务管理器对象
2.开启事务注解驱动 告诉框架 我即将使用事务
3.在你方法上增加@Transactional
2.适合大型项目的事务 有很多类 方法
1.使用aspectj框架 加入依赖
2.声明事务处理器对象
3.声明方法需要的事务类型【配置方法的事务属性(隔离级别 传播行为)】
4.配置aop 执行哪些类要创建代理