spring synchronized Transactional 无效解决办法
来源:互联网 发布:通州淘宝城 编辑:程序博客网 时间:2024/05/17 06:48
上周遇到一个问题,就是 synchronized 加 Transactional 导致事物失效的问题,在网上搜了一堆,都是说什么在外层套一个没有事物的方法,在加synchronized ,亲测无效,并且即使没有并发问题,单个操作的时候,你就会发现即使代码报错,事物是 不会回滚的! 下面写出我的解决办法。
原有的代码不要动,该有事物就有事物,然后在 主要是在 Controller 层,添加线程池控制。
这里我就不写公司的源码了,直接把精简的东西拿出来。
@Controller
public class TestController{
private ExecutorService exec = null;
@RequestMapping("abc")
public String abc(){
if(exec ==null){
//如果线程池为空或者该线程池被关闭了,就新建一个单例的线程池
exec = Executors.newSingleThreadExecutor();
}else if(exec.isShutdown() ){
exec = Executors.newSingleThreadExecutor();
}
//由于我们需要捕获线程抛出的异常,或者说是service层抛出的异常,我们用线程池的submit方法来执行我们的业务,submit是可以有返回值的
//为啥要用future,因为如果要捕获异常,就要保障线程的同步的,所以要用str.get(),如不这样写,你是无法捕获这个线程的异常的,他已变成异步线程了。
Future<String> str = exec.submit(new Callable<String>() {
@Override
public String call() throws CoreException {
//TODO 你的业务方法 (service.save())
return "1";
}
});
try {
str.get();
} catch (Exception e1) {
log.info(e1);
throw new Exception("系统异常");
}
}
exec.shutdown();
}
}
转载请注明出处!!!
- spring synchronized Transactional 无效解决办法
- Spring @Transactional 配置无效 注意事项
- spring 框架@Transactional 不回滚 解决办法
- Spring @Transactional事物配置无效原因
- Spring @Transactional注解不回滚不起作用无效
- Spring整合MyBatis下@Transactional无效解决方案
- spring @transactional 和synchronized同时使用不能同步的问题
- Spring MVC @Transactional注解方式事务无效的解决方法
- Spring 下默认事务机制中@Transactional 无效的原因
- Spring 下默认事务机制中@Transactional 无效的原因
- Spring 下默认事务机制中@Transactional 无效的原因
- Spring @Transactional
- spring @Transactional
- Spring @Transactional
- Spring @Transactional
- 【Spring @Transactional】
- Spring @Transactional
- Spring @Transactional
- getAttribute与getParameter的区别
- python sqlite help类
- 单例模式的几种实现方式
- 【前端】使用Swiper显示正方体,左右翻转轮播图
- 一二维数组转换
- spring synchronized Transactional 无效解决办法
- 微软常用运行库合集自动安装 2017.06.24 X86X64
- 【转】WPF MVVM 循序渐进 (从基础到高级) 【已翻译100%】【1】
- 使用sc create创建服务注意点
- WMI需要开启服务才可以使用
- WebService到底是什么?
- 搭建Nginx静态网站
- Java的三种代理模式
- 跳转Activity时,加入动画效果(2)