0

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(); 
        }
    }
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 に答える