静态方法中及手动开始事务

    public void tx(IAtom atom) {// IAtom 是一个jfinal中一个接口,run里面是需要执行的代码,可以自定义
        String dbName = atom.db();// 获取spring中DataSourceTransactionManager的bean名称(通用通过ApplicationContext.getBean(DataSourceTransactionManager.class))
        DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) DBSpringContextHolder
                .getBean(dbName, DataSourceTransactionManager.class);
        DefaultTransactionDefinition txDefinition = new DefaultTransactionDefinition();

        /*
         * 设置隔离级别Isolation枚举 DEFAULT(-1), READ_UNCOMMITTED(1), =>读未提交 READ_COMMITTED(2),
         * =>读已提交 REPEATABLE_READ(4), =>可重复读 SERIALIZABLE(8); =>串行花
         */
        txDefinition.setIsolationLevel(atom.isolation().value());
        /*
         * 事务传播级别
         * 
         * 你有事务我就用你的,你没有我就自己创建一个,反正老子就是要事务。
         * REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
         * 
         * 你有事务我就用你的,你没有就算了,我也懒得麻烦。
         * SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
         * 
         * 你没事务给我用还敢调用老子,异常走你~~~~
         * MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
         * 
         * 
         * 老子不管你那套,你有事务是你的事,一边待着。老子自己得创建自己的事务。
         * REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
         * 
         * 
         * 老子不要事务,你调用我就了不起啊,让你的事务一边待着。我就按非事务方式跑
         * NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
         * 
         * 老子说了不要事务你还来,异常走你~~~~~~~~~~~ NEVER(TransactionDefinition.PROPAGATION_NEVER),
         * 
         * 先说好,你有没有事务,老子就创建新的。你要是有我就在你事务下创建嵌套事件。我提交、回滚与你无关。
         * NESTED(TransactionDefinition.PROPAGATION_NESTED);
         */
        txDefinition.setPropagationBehavior(atom.propagation().value());
        /*
         * 是否可读  boolean
         */
        txDefinition.setReadOnly(atom.readOnly());
        /*
         * 设置超时 设置要应用的超时(以秒为单位)。 默认值为TIMEOUT_DEFAULT(-1)。
         * 专为与PROPAGATION_REQUIRED或PROPAGATION_REQUIRES_NEW一起使用而设计,因为它仅适用于新启动的交易。
         * 请注意,不支持超时的事务管理器在给出除TIMEOUT_DEFAULT以外的任何其他超时时,将引发异常。
         */
        txDefinition.setTimeout(atom.timeout());
        
        TransactionStatus transactionStatus = transactionManager.getTransaction(txDefinition);

        try {
            boolean result = atom.run();
            if (result) {
                transactionManager.commit(transactionStatus);
            } else {
                transactionManager.rollback(transactionStatus);
            }

        } catch (Exception var7) {
            transactionManager.rollback(transactionStatus);
            log.error(var7.getMessage(), var7);
            var7.printStackTrace();
            throw var7;
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值