网站设计公司域名服务器建设,快速网站排名优化,新乡网站推广,哪些网站可以做外链目录 Spring中事务的实现
1、通过代码的方式手动实现事务
2、通过注解的方式实现声明式事务
2.1、Transactional作用范围
2.2、Transactional参数说明
2.3、注意事项
2.4、Transactional工作原理
事务隔离级别
1、事务特性
2、Spring中设置事务隔离级别
2.1、MySQL事…目录 Spring中事务的实现
1、通过代码的方式手动实现事务
2、通过注解的方式实现声明式事务
2.1、Transactional作用范围
2.2、Transactional参数说明
2.3、注意事项
2.4、Transactional工作原理
事务隔离级别
1、事务特性
2、Spring中设置事务隔离级别
2.1、MySQL事务隔离级别
2.2、Spring事务隔离级别
Spring事务传播机制
spring事务传播机制分类
1、Propagation.REQUIRED
2、Propagation.SUPPORTS
3、Propagation.MANDATORY
4、Propagation.REQUIRES_NEW
5、Propagation.NOT_SUPPORTED
6、Propagation.NEVER
7、Propagation.NESTED Spring中事务的实现
1、通过代码的方式手动实现事务 Autowiredprivate DataSourceTransactionManager transactionManager;Autowiredprivate TransactionDefinition transactionDefinition;//1、开启事务TransactionStatus transactionStatustransactionManager.getTransaction(transactionDefinition);//手动设置创建时间和修改时间的默认值userinfo.setCreatetime(LocalDateTime.now().toString());userinfo.setUpdatetime(LocalDateTime.now().toString());//2、回滚事务//transactionManager.rollback(transactionStatus);//3、提交事务transactionManager.commit(transactionStatus);
2、通过注解的方式实现声明式事务 Transactional 1、可以添加在类上或方法上 2、在方法执行前自动开启事务在方法执行完没有任何异常自动提交事务但是如果在方法执行期间出现异常那么将自动回滚事务 Transactional //声明式事务自动提交RequestMapping(insert)public Integer insert(Userinfo userinfo){//非空效验if (userinfonull || !StringUtils.hasLength(userinfo.getUsername())|| !StringUtils.hasLength(userinfo.getPassword())){return 0;}int result userService.add(userinfo);System.out.println(添加result);return result;}
2.1、Transactional作用范围
修饰方法时只能用到public方法上否则不生效
修饰类时表明该注解对该类中所有的public方法都生效
2.2、Transactional参数说明
参数 说明 value当配置了多个事务管理器时可以使用该属性指定选择哪个事务管理器。transactionManager当配置了多个事务管理器时可以使用该属性指定选择哪个事务管理器.propagation事务的传播行为默认值为Propagation.REQUIREDisolation事务的隔离级别默认值为Isolation. DEFAULTtimeout事务的超时时间默认值为-1如果超过该时间限制但事务还没有完成则自动回滚事务.readOnly指定事务是否为只读事务默认值为false;为了忽略那些不需要事务的方法比如读取数据可以设置read-only为true.rollbackFor用于指定能够触发事务回滚的异常类型,可以指定多个异常类型。rollbackForClassName用于指定能够触发事务回滚的异常类型,可以指定多个异常类型.noRollbackFor抛出指定的异常类型不回滚事务也可以指定多个异常类型noRollbackForClassName抛出指定的异常类型.不回滚事务,也可以指定多个异常类型
2.3、注意事项
当程序中有try-catch。及时程序发生异常事务也不会回滚 Transactional //声明式事务自动提交RequestMapping(insert)public Integer insert(Userinfo userinfo){//非空效验if (userinfonull || !StringUtils.hasLength(userinfo.getUsername())|| !StringUtils.hasLength(userinfo.getPassword())){return 0;}int result userService.add(userinfo);System.out.println(添加result);try {int num10/0;} catch (Exception e) {System.out.println(e.getMessage());}return result;}
解决方法
1、将异常抛出去 Transactional //声明式事务自动提交RequestMapping(insert)public Integer insert(Userinfo userinfo){//非空效验if (userinfonull || !StringUtils.hasLength(userinfo.getUsername())|| !StringUtils.hasLength(userinfo.getPassword())){return 0;}int result userService.add(userinfo);System.out.println(添加result);try {int num10/0;} catch (Exception e) {//将异常继续抛出throw e;}return result;}
2、使用代码手动回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
2.4、Transactional工作原理 事务隔离级别
1、事务特性
原子性
一致性
持久性
隔离性
2、Spring中设置事务隔离级别
2.1、MySQL事务隔离级别
事务隔离级别脏读不可重复读幻读读未提交(READ UNCOMMITTED)√√√读已提交(READ COMMITTED)×√√可重复读(REPEATABLE READ)××√串行化SERIALIZABLE×××
2.2、Spring事务隔离级别
1. Isolation.DEFAULT: 以连接的数据库的事务隔离级别为主。
2. Isolation.READ. _UNCOMMITTED:读未提交,可以读取到未提交的事务存在脏读。
3. Isolation.READ. COMMITTED:读已提交,只能读取到已经提交的事务,解决了脏读存在不可重复读。
4. Isolation.REPEATABLE READ:可重复读,解决了不可重复读,但存在幻读(MySQL默认级别)。
5. Isolation.SERIALIZABLE: 串行化可以解决所有并发问题但性能太低。
通过设置Transactional里的isolation属性即可
Spring事务传播机制
spring事务传播机制分类
1、Propagation.REQUIRED
默认传播机制如果调用链存在事务则加入事务如果不存在则创建事务 2、Propagation.SUPPORTS
如果调用链存在事务则加入事务如果不存在则非事务方式运行 3、Propagation.MANDATORY
强调必须有事务 4、Propagation.REQUIRES_NEW 5、Propagation.NOT_SUPPORTED 6、Propagation.NEVER 7、Propagation.NESTED 嵌套事务和加入事务的区别 1、整个事务如果全部执行成功二者的结果是一样的 2、如果事务执行到一半失败了那么加入事务整个事务会全部回滚而嵌套事务会局部会滚不会影响上一个方法中执行的结果