0

我已将以下内容添加到我的 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(); 
        }
    }
4

1 回答 1

3

所以就像我想的那样。这

<mvc:annotation-driven>
    <mvc:async-support default-timeout="180"/>
</mvc:annotation-driven>

async-support这里无关@Async。它与Servlet 3 异步请求处理有关。

无法为该@Async方法提供超时值。看看这个答案如何实际做到这一点。

于 2013-10-02T18:13:49.797 回答