Spring如何保证EntityManager的线程安全

小武格 2016-04-29 03:55:47
我现在有一个dao,代码如下:

@Repository
public class UserDaoImpl implements UserDao {
@PersistenceContext
private EntityManager em;

@Override
public void update(User user) {
em.merge(user);
}
}

有一个service:

@Service
public class UserServiceImpl implements UserService {

@Autowired
private UserDao userdao;

@Transactional
@Override
public void update(User user){
userdao.update(user);
}
}

还有一个controller,如下:

@Controller
@RequestMapping("/user")
public class LoginUser {

static ExecutorService threadPool = Executors.newFixedThreadPool(10);

@Autowired
private UserService userService;

@RequestMapping("/update")
public String update(User user){
threadPool.execute(new Runnable() {
@Override
public void run() {
userService.update(user);
}
});
return "success";
}
}

当用户访问调用到controller的update方法时,会不会有线程安全的问题?
为什么我会收到
Exception in thread "pool-1-thread-2" org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: EntityManagerFactory is closed
这个异常呢?

谢谢。
...全文
416 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Smile_Pride 2017-11-03
  • 打赏
  • 举报
回复
小哥,你解决了吗
Smile_Pride 2017-07-31
  • 打赏
  • 举报
回复
我今天就碰到了.用线程池异步优化后就出现这种错误.现在又改回同步执行了.无力啊

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧