저장 함수를 호출 할 메서드가 있습니다. async'ly 그것의 일을하고 싶습니다. 이것은 내가 가진 것이지만, getDao.deleteAll()
을 호출하면 저장된 함수가 실행되지 않기 때문에 .doWork()가 시작되지 않은 것처럼 보입니다.세션이있는 비동기 서비스
@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(); '를 시도해보십시오. –
그냥 행운을 빕니다 – PhoonOne
'executorService.shutdown();'다음에'while (! executorService.isTerminated()) {}'를 사용해보십시오. 이것에 의해, 현재의 thread는,'ExecutorService '의 thread가 종료 할 때까지 대기합니다. 이것은 테스트 목적을위한 것입니다. 왜냐하면 여기에서 끝나면이 스레드를 초기화하는 주 스레드에 문제가 있음을 의미하기 때문입니다. –