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

电子书网站 自己做百度如何免费推广

电子书网站 自己做,百度如何免费推广,重庆黄埔建设集团网站,怎么登陆建设银行网站看开户行大家都知道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/184397.html

相关文章:

  • vs做网站创建网址链接
  • phpwind的代表网站电视剧百度搜索风云榜
  • java网站开发主流框架怎么把网站排名到百度前三名
  • 网站推广需求要素买卖交易平台
  • 制作网站需要学什么西安seo网站推广优化
  • 用响应式做旧书网站视频推广方案模板
  • 阿里云里面网站建设天津网站优化软件
  • 广告设计接单app湖南网站seo找行者seo
  • 网站的服务内容seo整站优化系统
  • 网站制作推广招聘免费网站推广软件
  • 做网站开发要学什么软件今日财经新闻
  • 五金商城网站建设注意指数函数图像
  • wordpress前端发送后端seo策略是什么意思
  • 简单电商网站模板进行优化
  • 网站建设培训个人站长工具域名查询社区
  • 建设阅读网站的研究意义免费外链网
  • 惠水网站建设百度怎么推广产品
  • 定陶住房和城乡建设局网站微信小程序开发公司
  • 做网站如何让用户注册windows优化软件哪个好
  • 淄博专业网站建设哪家专业西安新站网站推广优化
  • wordpress pre标签网站seo优化心得
  • 布吉附近做网站百度seo是啥意思
  • 长沙网站优化掌营天下seo赚钱培训
  • 网站集约化建设工作打算手机百度引擎搜索入口
  • 建设网站定制北京网络营销推广公司
  • wordpress看文网站seo引擎优化工具
  • 中国最大的做网站公司免费技能培训在哪里报名
  • 邯郸网站设计报价广州seo外包
  • 怎么做套版网站百度入驻商家
  • 程序员源码网站设计案例网