Spring UnknownServiceException

时间:2017-06-13 11:01:34

标签: java spring multithreading hibernate spring-mvc

我已经在访问@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]

我尝试在所有线程上同步对服务的访问,但异常仍然随机发生。有什么方法可以防止这种错误吗?

1 个答案:

答案 0 :(得分:0)

看起来Spring在退出时并没有关闭计划任务,并且它们在没有上下文的情况下继续运行。添加

@PreDestroy
private void destroyListener() {
    synchronized (this) {
        scheduledTask.cancel(false);
    }
}

似乎解决了这个问题