我已将以下内容添加到我的 Spring 配置中。我假设默认超时值以秒为单位,所以我将其设置为三分钟。我设置了一个异步任务来让当前线程休眠五分钟。我触发了异步任务,它运行完成,没有异常或中断。我究竟做错了什么?
<mvc:annotation-driven>
<mvc:async-support default-timeout="180"/>
</mvc:annotation-driven>
以下是我正在调用的异步方法:
@Async
public void generateIDOIncentiveFiles(String sessionId, String userId) throws Exception
{
final long SLEEP_TIME_MILLS = 5 * 60 * 1000;
try
{
// Get the job entry from the JOBS table
Job job = jobsDao.getJob(RequestHelper.JOB_IDO_INCENTIVES);
// Check to see if the job is enabled.
if ( job.isEnabled() == false )
throw new Exception ( "Job is not enabled" );
// Check to see if the job is already running.
if ( job.isRunning() )
throw new Exception ( "Job is running" );
// Start the timer
StopWatch sw = new StopWatch();
sw.start();
// Capture the date/time when the job was started
Date jobStartDate = new Date();
LOG.debug("Starting IDO Incentives Extract process..." );
String jobCurrentStatus = "running";
String jobLastRunMsg = "Job started";
Date jobLastRunDate = new Date();
jobsDao.updateJobStarted(userId, RequestHelper.JOB_IDO_INCENTIVES, jobLastRunDate, jobLastRunMsg, jobCurrentStatus);
LOG.debug("Sleeping for five minutes..." );
Thread.sleep(SLEEP_TIME_MILLS);
LOG.debug("Back from sleep." );
jobCurrentStatus = "idle";
// Capture the date/time when the job ended
sw.stop();
double elapsedTime = sw.getTotalTimeSeconds();
int elapsedTimeMinutes = (int) (elapsedTime / 60);
Date jobEndDate = new Date();
jobsDao.updateJobComplete(RequestHelper.JOB_IDO_INCENTIVES, "", "idle");
// Add entry to JOB_HISTORY table
LOG.debug("Updating job history..." );
JobHistory jobHistory = new JobHistory();
jobHistory.setFile_name("file name");
jobHistory.setFile_path("file path");
jobHistory.setElapsed_time(elapsedTimeMinutes);
jobHistory.setEnd_date(jobEndDate);
jobHistory.setJob_name(RequestHelper.JOB_IDO_INCENTIVES);
jobHistory.setStart_date(jobStartDate);
jobHistory.setStatus("Success");
jobHistory.setUserid(userId);
jobHistoryDao.insertJobHistory(jobHistory);
LOG.debug("Job complete" );
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}