程序中有一段service层方法加上了注解@Transactional(propagation=Propagation.REQUIRED),程序执行时抛出RunTimeException,于是执行回滚,那么这里触发回滚的RunTimeException会令程序终止吗,还是只是单纯的回滚对数据库操作的部分?
我现在的情况是在这个注解了回滚的方法里抛了一个错,并且上层没有catch来捕获异常,但是程序还在继续跑。log里已经打印了错误了程序却没有终止,有大神有什么思路么?
没有回滚的话,应该是你的事务没有配置正确
RunTimeException 没有进行catch的话,是由JVM来处理的,是会终止程序的。
但是如果处于多线程环境,它只是终止当前发生异常的线程,而不是全部终止。
public static void main(String[] args) throws Exception {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(2 / 0);
System.out.println("child end");
}
}).start();
// 保证子线程先执行完
Thread.sleep(1);
System.out.println("main end");
}
上面的代码中,子线程 出现 java.lang.ArithmeticException,主线程仍然输出 main end。
如果注释掉2/0,则子线程输出 child end ,主线程输出 main end。