网站如何提高转化率,医疗网站备案,c++编程软件,网站集约化建设会议议程1.Spring 事务实现方式有哪些#xff1f;
事务就是一系列的操作原子操作,Spring事务机制主要 包括声明式事务和编程式事务。
编程式事务#xff1a;通过编程的方式管理事务#xff0c;自己设置未提交模式#xff0c;自己获取连接#xff0c;自己预编译#xff0c;自己回…1.Spring 事务实现方式有哪些
事务就是一系列的操作原子操作,Spring事务机制主要 包括声明式事务和编程式事务。
编程式事务通过编程的方式管理事务自己设置未提交模式自己获取连接自己预编译自己回滚自己提交事务
声明式事务通过注解的方式来开启事务 通过aop,我们来封装对应的事务使用Transactional注解 开启声明式事务
Transactional相关属性如下
属性类型描述valuetransactionManagerString可选的限定描述符指定使用的事务管理器propagationenum: Propagation可选的事务传播行为设置isolationenum: Isolation可选的事务隔离级别设置readOnlyboolean只读事务timeoutint事务超时时间设置rollbackForClass对想数组必须继承Throwable遇到什么异常类回滚rollbackForClassName类名数组必须继承自Throwable导致事务回滚的异常类名字数组noRollbackForClass对象数组必须继承自Throwable不会导致事务回滚的异常类数组noRollbackForClassName类名数组必须继承自Throwable不会导致事务回滚的异常类名字数组
2.有哪些事务传播行为
1.PROPAGATION_REQUIRED 如果存在一个事务则支持当前事务。如果没有事务则开启一个新的事务。如果嵌套调用的两个方法都加了事务注解并且运行在相同线程中则这两个方法使用相同的事务中。如果运行在不同线程中则会开启新的事务。
2.PROPAGATION_SUPPORTS 如果存在事务支持当前事务当前没有事务则非事务的执行
3.PROPAGATION_MANDATORY如果存在一个事务支持当前事务如果不存在事务则抛出异常
4.PROPAGATION_REQUIRES_NEW总是开启一个新的事务需要JtaTrasactionManager作为事务管理器
5.PROPAGATION_NOT_REQUIRES 总是非事务地执行并挂起任何存在的事务需要使用JtaTransactionManager作为事务管理器。
6.PROPAGATION_NEVER总是非事务存在如果存在一个活动事务则抛出异常
7.PROPAGATION_NESTED如果一个活动的事务存在则运行在一个嵌套的事务中如果没有活动事务则按PROPAGATION_REQUIRED属性执行
3.Spring事务在什么情况下会失效
1.访问权限问题
java的访问权限主要有四种private、default、protected、public它们的权限从左到右依次变大。
如果事务方法的访问权限不是定义成public这样会导致事务失效因为spring要求被代理方法必须是public的。
2. 方法用final修饰
如果事务方法用final修饰将会导致事务失效。因为spring事务底层使用了aop也就是通过jdk动态代理或者cglib帮我们生成了代理类在代理类中实现的事务功能。
3.对象没有被spring管理
使用spring事务的前提是对象要被spring管理需要创建bean实例。如果类没有加Controller、Service、Component、Repository等注解即该类没有交给spring去管理那么它的方法也不会生成事务。
4.表不支持事务
如果MySQL使用的存储引擎是myisam这样的话是不支持事务的。因为myisam存储引擎不支持事务。
5.方法内部调用
如下代码所示update方法上面没有加 Transactional 注解调用有 Transactional 注解的 updateOrder 方法updateOrder 方法上的事务会失效。
因为发生了自身调用调用该类自己的方法而没有经过 Spring 的代理类只有在外部调用事务才会生效。
6.未开启事务
如果是spring项目则需要在配置文件中手动配置事务相关参数。如果忘了配置事务肯定是不会生效的。
如果是springboot项目那么不需要手动配置。因为springboot已经在DataSourceTransactionManagerAutoConfiguration类中帮我们开启了事务。
7.吞了异常
有时候事务不会回滚有可能是在代码中手动catch了异常。因为开发者自己捕获了异常又没有手动抛出把异常吞掉了这种情况下spring事务不会回滚。