开发者社区> 问答> 正文

Jfinal数据库事务处理,默认情况是自动提交的,可否提供一个默认是不提交的设置?

Jfinal数据库事务处理,默认情况是自动提交的,可否提供一个默认是不提交的设置?

因为在团队合作过程中,有多条语句要一起执行时,很有可能忘记了事务注释(@Before(Tx.class)),导致隐藏的风险,如果设置为默认不提交,在开发时就可以发现,因为数据保存不进数据库。

展开
收起
小旋风柴进 2016-06-08 15:08:47 4891 0
1 条回答
写回答
取消 提交回答
  • 自动提交是JDBC默认的,JFinal并未干预,如果想打破这个默认值只需要仿照Tx.java写一个AutoCommitOffInterceptor拦截器即可,代码如下:

    public class AutoCommitOffInterceptor implements Interceptor {
      public void intercept(ActionInvocation invocation) {
        Connection conn = null;
        try {
          conn = DbKit.getDataSource().getConnection();
          DbKit.setThreadLocalConnection(conn);
          conn.setAutoCommit(false);
          invocation.invoke();
        } catch (Exception e) {
          throw new ActiveRecordException(e);
        }
        finally {
          try {
            if (conn != null) {
              conn.close();
            }
          } catch (Exception e) {
            e.printStackTrace();
          }
          finally {
            DbKit.removeThreadLocalConnection();
          }
        }
      }
    2019-07-17 19:32:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载