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

用哪个软件做网站企业网络营销目标

用哪个软件做网站,企业网络营销目标,asp网站,个人怎么找猎头公司推荐自己大家都知道Spring的声明式事务在多线程当中会失效,来看一下如下案例。 按照如下方式,b()方法抛出异常,由于父子线程导致事务失效,a()会成功插入,但是b()不会。 因此成功插入一条数据,事务失效。 Component public class UserServ…

大家都知道Spring的声明式事务在多线程当中会失效,来看一下如下案例。
按照如下方式,b()方法抛出异常,由于父子线程导致事务失效,a()会成功插入,但是b()不会。
因此成功插入一条数据,事务失效。

@Component
public class UserServiceImpl implements UserService{@Transactionalpublic void a(){jdbcTemplate.execute("insert into `user`(`age`,`name`,`city`) values(18,'张三','北京')");UserService userService = (UserService)AopContext.currentProxy();Thread thread = new Thread(()->{userService.b();})}@Transactionalpublic void b(){jdbcTemplate.execute("insert into `user`(`age`,`name`,`city`) values(19,'张三','北京')");throw new RuntimeException();}}

这里就需要了解一下嵌套方法事务的传播行为是怎么实现的?
在这里插入图片描述
如图所示,如果b()方法是在子线程当中的,因为ThreadLocal不是同一个因此子线程又创建了一个事务。由于是各用各的事务所以事务b就会回滚,而事务a的数据就会插入成功。
要保证这种父子线程中的事务传播,则在创建子线程后把父线程中的事务取出来再设置进去。
进行如下改造后保证两个线程使用同一个事务。
在这里插入图片描述
那么接下来的问题就是如何获取外层的connection以及如何设置到子线程的ThreadLocal中。
这里就需要看一下源码了
需要看这个类org.springframework.jdbc.datasource.DataSourceTransactionManager找到doBegin()方法

@Override
protected void doBegin(Object transaction, TransactionDefinition definition) {DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;Connection con = null;try {if (!txObject.hasConnectionHolder() ||txObject.getConnectionHolder().isSynchronizedWithTransaction()) {Connection newCon = obtainDataSource().getConnection();if (logger.isDebugEnabled()) {logger.debug("Acquired Connection [" + newCon + "] for JDBC transaction");}txObject.setConnectionHolder(new ConnectionHolder(newCon), true);}txObject.getConnectionHolder().setSynchronizedWithTransaction(true);con = txObject.getConnectionHolder().getConnection();Integer previousIsolationLevel = DataSourceUtils.prepareConnectionForTransaction(con, definition);txObject.setPreviousIsolationLevel(previousIsolationLevel);txObject.setReadOnly(definition.isReadOnly());if (con.getAutoCommit()) {txObject.setMustRestoreAutoCommit(true);if (logger.isDebugEnabled()) {logger.debug("Switching JDBC Connection [" + con + "] to manual commit");}// 这里开启事务con.setAutoCommit(false);}prepareTransactionalConnection(con, definition);txObject.getConnectionHolder().setTransactionActive(true);int timeout = determineTimeout(definition);if (timeout != TransactionDefinition.TIMEOUT_DEFAULT) {txObject.getConnectionHolder().setTimeoutInSeconds(timeout);}// 这里将连接存入到ThreadLocalif (txObject.isNewConnectionHolder()) {TransactionSynchronizationManager.bindResource(obtainDataSource(), txObject.getConnectionHolder());}}catch (Throwable ex) {if (txObject.isNewConnectionHolder()) {DataSourceUtils.releaseConnection(con, obtainDataSource());txObject.setConnectionHolder(null, false);}throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex);}
}

最终改造

@Component
public class UserServiceImpl implements UserService{@Transactionalpublic void a(){ConnectionHolder connectionHolder = TransactionSynchronizationManager.getResource(dataSource);jdbcTemplate.execute("insert into `user`(`age`,`name`,`city`) values(18,'张三','北京')");UserService userService = (UserService)AopContext.currentProxy();Thread thread = new Thread(()->{// 绑定主线程的connection到子线程TransactionSynchronizationManager.bindResource(dataSource,connectionHolder);userService.b();})}@Transactionalpublic void b(){jdbcTemplate.execute("insert into `user`(`age`,`name`,`city`) values(19,'张三','北京')");throw new RuntimeException();}}
http://www.dtcms.com/wzjs/288882.html

相关文章:

  • 个人网站建设济南seo外贸网站建设
  • app开发公司哪家比较好百度软件优化排名
  • 如何给公司做网站百度推广是什么
  • 购物网站建设 属于信息系统管理与设计么互联网推广话术
  • 电子购物网站设计日本进口yamawa
  • 南宁网站建设设计西安关键词优化服务
  • 网站建设与维护案列贵州百度seo整站优化
  • 网页网络游戏专业网站优化公司
  • 南通网络公司网站营销推广的方法有哪些
  • 云朵课堂网站开发怎么收费美国站外推广网站
  • 一级a做爰片免费网站瑜伽东莞搜索优化
  • 做网站什么价位长沙专业竞价优化首选
  • 网站怎么做微信分享互联网培训机构排名前十
  • 哪里有做网站的公司营销推广ppt
  • 关于行业网站建设意见sem是指什么
  • 腾讯广告建站工具苏州网站建设费用
  • 馆陶网站建设小型培训机构管理系统
  • 遂昌建设局网站宣传软文范例
  • 西乡移动网站建设网页开发教程
  • 安庆做网站公司逆冬seo
  • 公司网站建设费用账务处理合肥seo整站优化网站
  • wordpress 原图查看深圳百度关键字优化
  • 昆明利于优化的网站网站权重是怎么提升的
  • 网站做app的软件seo快速排名源码
  • 电子商务网站建设有哪些流程互联网营销师报名
  • 如何做自己的淘宝网站seo关键词排名优化销售
  • 凌源市建设局网站seo技术平台
  • 爱站seo排名可以做哪些网站网站设计优化
  • b2b电子商务网站调研报告电大作业seo专业实战培训
  • 湖北建设注册中心网站首页营销软文范例大全100字