请问如果业务层事务异常,我想在业务层把相关的异常信息插入数据库日志表中,但是异常的时候因为会回滚,所以日志也回滚了,该怎么解决

lcg0211 发布于 2016/09/08 11:01
阅读 660
收藏 0

@JFinal 你好,想跟你请教个问题:

如果业务层事务异常,我想在业务层把相关的异常信息插入数据库日志表中,但是异常的时候因为会回滚,所以日志也回滚了,该怎么解决?

我是否可以在Jfinal的连接池中另外取一个新的数据库连接,并执行model的插入操作

Connection c=DbKit.getConfig().getDataSource().getConnection();

c.prepareStatement(...);

是这样写的吗?

还有如果新取的连接要如何关闭呢?


加载中
0
JFinal
JFinal

   建议用一个全局拦截器,在其中 try catch 所有异常,然后做下日志即可,业务层事务有异常回滚事务以后,仍然会向外抛出异常

   不建议自行获取 connection 来操作数据,jfinal 现有的很多实用功能可以满足绝大部分需求。如果一定要自行获取连接,注意要自行 close 掉连接,否则会造成资源泄漏

0
lcg0211
lcg0211

引用来自“JFinal”的评论

   建议用一个全局拦截器,在其中 try catch 所有异常,然后做下日志即可,业务层事务有异常回滚事务以后,仍然会向外抛出异常

   不建议自行获取 connection 来操作数据,jfinal 现有的很多实用功能可以满足绝大部分需求。如果一定要自行获取连接,注意要自行 close 掉连接,否则会造成资源泄漏

波总,还有一个问题想请教一下,我现在使用QuartzPlugin,以下是YdzJob类的代码,在Job类里面抛出的异常能被全局异常拦截器抓到吗?

public class YdzJob implements Job {
private static Logger log = LoggerFactory.getLogger(YdzJob.class);


public void execute(JobExecutionContext arg0) throws JobExecutionException {
log.info("------调度任务【Ydz】启动------" + DateUtil.curDate());
try {
QuartzService.me.exec(QuartzService.SchedType.YDZ); //这里抛出异常能被全局异常拦截器抓到吗?
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.info("------调度任务【Ydz】结束------" + DateUtil.curDate());
}


}

这是我的拦截器代码

package com.icss.interceptor;


import com.icss.service.LogService;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;


public class ExceptionInterceptor implements Interceptor {


@Override
public void intercept(Invocation inv) {
try {
inv.invoke();
} catch (Exception e) {
String excpMsg=e.getMessage();
//System.out.println("进来了");
LogService.me.logFailure(null, null, null, excpMsg);
}
}


}


JFinal
JFinal
这种方式没被全局拦截器拦截到,自然无法被全局拦截器感知到
返回顶部
顶部