当前位置: 首页 > news >正文

建筑效果图网站有哪些百度软件商店下载安装

建筑效果图网站有哪些,百度软件商店下载安装,室内设计公司和装修公司的区别,网站名字设计Spring事务的实现方式和实现原理 Spring事务的本质其实就是数据库对事务的支持#xff0c;没有数据库的事务支持#xff0c;spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。 什么是事务 数据库事务是指作为单个逻辑工作单元执…Spring事务的实现方式和实现原理 Spring事务的本质其实就是数据库对事务的支持没有数据库的事务支持spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。 什么是事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作这些操作要么一起成功要么一起失败是一个不可分割的工作单元。 在我们日常工作中涉及到事务的场景非常多一个 service 中往往需要调用不同的 dao 层方法这些方法要么同时成功要么同时失败我们需要在 service 层确保这一点 事务的四大特性:A原子性 C一致性 I隔离性 D持久性 Spring支持的事务管理类型 spring 事务实现方式有哪些 Spring支持两种类型的事务管理 编程式事务管理这意味你通过编程的方式管理事务给你带来极大的灵活性但是难维护。 声明式事务管理这意味着你可以将业务代码和事务管理分离你只需用注解和XML配置来管理事务。 Spring中事务的实现方式 1、编程式—实现事务 ​ 在applicationContext.xml中配置好数据源和事务管理器: 以上这种方式 不推荐使用代码入侵太多。大量的处理事务的代码穿插到业务代码中 2、声明式—实现事务 (1)、声明式事务:xml形式 提前配置好数据源 配置事务管理器配置通知添加事务的切面Aop的织入将切面和切入点绑定起来 2、configration配置类的形式配置声明式事务 ​ 1、配置好数据源信息 2、配置事务管理器 3、开启事务的注解支持 将该配置类添加到包扫描路径下接来下就可以直接在service的方法或者类上使用Transactional注解给方法添加事务 3、xml注解方式配置声明式事务 配置完成后只需要在想要开启注解的方法上加上Transactional注解就可以了 说一下Spring的事务传播行为 spring事务的传播行为说的是当多个事务同时存在的时候spring如何处理这些事务的行为。 ① PROPAGATION_REQUIRED默认的事务传播如果当前没有事务就创建一个新事务如果当前存在事务就加入该事务该设置是最常用的设置。 ② PROPAGATION_SUPPORTS支持当前事务如果当前存在事务就加入该事务如果当前不存在事务就以非事务执行。 ③ PROPAGATION_MANDATORY支持当前事务如果当前存在事务就加入该事务如果当前不存在事务就抛出异常。 ④ PROPAGATION_REQUIRES_NEW创建新事务无论当前存不存在事务都创建新事务。 ⑤ PROPAGATION_NOT_SUPPORTED以非事务方式执行操作如果当前存在事务就把当前事务挂起。 ⑥ PROPAGATION_NEVER以非事务方式执行如果当前存在事务则抛出异常。 ⑦ PROPAGATION_NESTED如果当前存在事务则在嵌套事务内执行。如果当前没有事务则按REQUIRED属性执行。 在一个事务执行的过程中调用另一个事务时候(比如一个service方法调用另一个service方法)这个事务将以何种状态存在是两个事务共存呢还是一个事务是另一个事务的子事务还是一个事务加入另一个事务的子事务呢……利用事务的传播性来解决这个问题。 ​ 1、REQUIRED: spring默认的事务的传播性 ​ REQUIRED 表示如果当前存在事务则加入该事务如果当前没有事务则创建一个新的事务。 Service public class AccountService {AutowiredJdbcTemplate jdbcTemplate;Transactionalpublic void handle1() {jdbcTemplate.update(update user set money ? where id?;, 1, 2);} } Service public class AccountService2 {AutowiredJdbcTemplate jdbcTemplate;AutowiredAccountService accountService;public void handle2() {jdbcTemplate.update(update user set money ? where username?;, 1, zhangsan);accountService.handle1();} }如果 handle2 方法本身是有事务的则 handle1 方法就会加入到 handle2 方法所在的事务中这样两个方法将处于同一个事务中一起成功或者一起失败不管是 handle2 还是 handle1 谁抛异常都会导致整体回滚。 如果 handle2 方法本身是没有事务的则 handle1 方法就会自己开启一个新的事务。 ​ 2、REQUIRES_NEW ​ REQUIRES_NEW 表示创建一个新的事务如果当前存在事务则把当前事务挂起。换言之不管外部方法是否有事务REQUIRES_NEW 都会开启自己的事务。 ​ 3、NESTED ​ NESTED 表示如果当前存在事务则创建一个事务作为当前事务的嵌套事务来运行如果当前没有事务则该取值等价于 TransactionDefinition.PROPAGATION_REQUIRED。 ​ 4、MANDATORY ​ MANDATORY 表示如果当前存在事务则加入该事务如果当前没有事务则抛出异常。 ​ 5、SUPPORTS ​ NOT_SUPPORTED 表示以非事务方式运行如果当前存在事务则把当前事务挂起。 ​ 6、NOT_SUPPORTED ​ NOT_SUPPORTED 表示以非事务方式运行如果当前存在事务则把当前事务挂起。 ​ 7、NEVER ​ NEVER 表示以非事务方式运行如果当前存在事务则抛出异常。 spring事务的实现原理 ​ 底层是通过aop进行实现Transactional注解使用环绕通知在进入方法前开启事务 。使用try catch包含目标方法执行目标方法执行完成后如果没有抛出异常就提交事务。如果抛出异常就进行回滚。 代码实现: 定义注解 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Inherited Documented public interface rkTransactional { }切面 Aspect Component Slf4j public class ExtrkThreadAop {Autowiredprivate RkTransaction rkTransaction;/*** 只要方法上有加上rkTransactional 走around* 异常通知* param joinPoint* throws Throwable*/Around(value annotation(com.rk.aop.rkTransactional))public Object around(ProceedingJoinPoint joinPoint) {// 在目标方法之前开启事务 底层实现:将事务状态保存在当前线程里面TransactionStatus transactionStatus rkTransaction.begin();try {Object result joinPoint.proceed();//目标方法log.info(目标方法之后执行);//提交事务rkTransaction.commit(transactionStatus);return result;} catch (Throwable throwable) {// 目标方法执行向外抛出异常之后 手动回滚rkTransaction.rollback(transactionStatus);return fail;}} }注解类 Component public class RkTransaction {Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;// 开启事务public TransactionStatus begin() {TransactionStatus transaction dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());return transaction;}// 提交事务public void commit(TransactionStatus transactionStatus) {dataSourceTransactionManager.commit(transactionStatus);}// 回滚事务public void rollback(TransactionStatus transactionStatus) {dataSourceTransactionManager.rollback(transactionStatus);} }test: 测试 /*** 使用事务注解 事务到底在什么时候提交呢该方法没有抛出异常的情况下就会自动提交事务* aop* param name* return*/GetMapping(/insertUser)rkTransactionalpublic String insertUser(String name) {int result userMapper.insertUser(name);if (rk.equals(name)) {int j 1 / 0;}return result 0 ? ok : fail;} }
http://www.zqtcl.cn/news/67550/

相关文章:

  • 房和城乡建设部网站wordpress主题在线制作
  • h5手机网站怎么做虚拟空间应用程序下载
  • 电影网站如何优化百度收录提交接口
  • seo网站排名厂商定制广东智唯网站建设公司
  • 西安建设高端网站郑州做网站设计
  • 营销型网站建设可行性分析高端企业网站建设注意问题
  • 常熟高端网站建设网站免费建站 网页不需要备案
  • pc网站和手机网站wordpress 免费中文模板下载地址
  • 涿州做软件和网站的陵水网站建设费用
  • 济南万网站建设有限公司地址p2p网站建设规划
  • 做全景图二维码的网站青岛做网站找什么公司
  • 网站建设中js控制什么新浪网页版登录
  • 重庆美邦建网站深圳做微信商城网站建设
  • 企业大型网站开发网站模板设计wordpress po mo
  • 杭州专业做网站公司西安网站建设工作室
  • 网站在线留言系统价格优化网站建设
  • wordpress 定制表单上海seo关键字推广
  • 吉林省建设厅网站杨学武北京外贸网站优化
  • wordpress企业站实例做有源代码的网站有什么好处
  • 移动网站备案logo参考网站
  • 订阅号做影视网站清溪镇网站建设公司
  • 做移动网站优化快wordpress+内网
  • 株洲做网站那家好公司网站建设怎么做
  • 景点网站开发积极意义扫二维码直接进网站怎么做
  • 建设网站设计论文范文品牌网站建设公司有哪些
  • 信阳网站建设哪个好网站关键词设置数量
  • 数控机床网站建设网站建设费用推荐网络
  • 网站权重如何合理分配网站统计分析
  • 二手书交易网站开发毕业设计空壳网站
  • 在谷歌上做外贸网站有用吗软件开发 网站建设