我已经在访问@Transactional服务的单独线程中安排了任务。 在这个任务中,我尝试访问这样的方法
List<Obj> objects = new ArrayList<Obj>(objService.getObjWithStatus(Status.PROCESSING));
有时会得到例外
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:544)
Caused by: org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
我尝试在所有线程上同步对服务的访问,但异常仍然随机发生。有什么方法可以防止这种错误吗?
答案 0 :(得分:0)
看起来Spring在退出时并没有关闭计划任务,并且它们在没有上下文的情况下继续运行。添加
@PreDestroy
private void destroyListener() {
synchronized (this) {
scheduledTask.cancel(false);
}
}
似乎解决了这个问题