我有一個將調用存儲函數的方法。我希望它異步地完成它的工作。這是我的,但似乎.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