美文网首页
@Transactional注解中的connection获取

@Transactional注解中的connection获取

作者: 南岩飞雪 | 来源:发表于2019-09-29 22:49 被阅读0次

问题

有人在技术交流群里问了这样一个问题:为啥在远程调用的时候,数据库连接就被占用了?

    @Transactional(rollbackFor = Exception.class)
    public void aFunction() {
        ...
        remoteService.revoke(); // 远程调用
        ...
        xxxDao.select(); // 数据库调用
        ...
        ...
    }

解释

  1. 排除 指令重排序 的情况,代码肯定是顺序执行的
  2. 加了 @Transactional注解,其实在进入这个方法的时候,就开启了事务;而事务是在connection上开启的;connection的获取和释放在切面完成
  3. 事务不要太大,在事务中执行耗时的远程调用肯定不好,会导致事务很长;我们项目中没有使用@Transactional,直接使用的 @Resource private TransactionTemplate transactionTemplate;
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    @Override
    protected void doInTransactionWithoutResult(TransactionStatus status) {
        xxxDAO.delete(...);
        sssDAO.batchInsert(...);
    }
});

@Transactional实现源码

待学习补充
org.springframework.transaction.interceptor.TransactionInterceptor#invoke

相关文章

网友评论

      本文标题:@Transactional注解中的connection获取

      本文链接:https://www.haomeiwen.com/subject/mbddcctx.html