我有一个将调用存储函数的方法。我希望它异步地完成它的工作。这是我的,但似乎.doWork()永远不会启动,因为当我呼叫getDao.deleteAll()
,存储的功能不会运行。会话异步服务
@Transactional
public void delete()
{
final Session session = (Session) entityManager.getDelegate();
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable()
{
@Override
public void run()
{
LOGGER.warn("starting");
session.doWork(new Work()
{
@Override
public void execute(Connection connection) throws SQLException
{
try
{
CallableStatement purgeArchived = connection.prepareCall("{call deleteAll()}");
purgeArchived.execute();
}
catch (SQLException exception)
{
LOGGER.warn("Failed to purge archive points. Reason: " + exception);
}
}
});
LOGGER.warn("stopping");
}
});
executorService.shutdown();
}
我看到记录器已登录"starting"
,但它从来没有得到"stopping"
为什么会出现这种情况?
尝试在'run'方法内移动'final Session session =(Session)entityManager.getDelegate();'。 – 2014-11-21 16:53:45
刚刚尝试过,没有运气 – PhoonOne 2014-11-21 17:11:11
尝试在'executorService.shutdown();'之后使用'while(!executorService.isTerminated()){}'。这将使当前线程等待,直到“ExecutorService”中的线程完成。这是为了测试目的,因为如果它在这里结束,这意味着问题出现在初始化此线程的主线程中。 – 2014-11-21 19:30:46