Spring 構成に以下を追加しました。default-timeout の値は秒単位であると想定しているので、3 分に設定します。現在のスレッドを 5 分間スリープさせる非同期タスクを設定しました。非同期タスクをトリガーすると、例外や割り込みなしで完了するまで実行されます。私は何を間違っていますか?
<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();
}
}