6

@Scheduled アノテーションを使用して cron ジョブを実行しています。スケジューリングはしばらく機能しますが、その後停止します。コードの簡略化されたスニペットを示します。

これはスケジューラです:

//org.springframework.scheduling.annotation.Scheduled
@Scheduled("*/30 * * * * *")    
public void performTask() {
    logger.info("Starting agent");
    getAgentAsyncTask().execute();
    logger.info("Ending agent");
}

これはスケジューラによって実行されるタスクです

//org.springframework.scheduling.annotation.Async
@Async(TASK_EXECUTOR)
@Override
public void execute() {
    logger.info("Starting task");
    //send some rest requests
    logger.info("Ending task");
}

両方: 「開始エージェント」と「終了エージェント」は同じ回数ログに記録されます。ということで、各日程は順調に終了。

両方: 「タスクの開始」と「タスクの終了」は同じ回数記録されます。したがって、間違いなく、「タスク」は物事をブロックしていません。

しかし、しばらくするとログが停止します。問題は何ですか?

ここで、TASK_EXECUTOR は次の Bean です。

 @Bean(TASK_EXECUTOR)
 public ThreadPoolTaskExecutor createDefaultTaskExecutor() {
          ThreadPoolTaskExecutor te = new ThreadPoolTaskExecutor();
          te.setMaxPoolSize(15);
          te.setCorePoolSize(15);
          te.initialize();
          return te;
    }

春のバージョン:

4.1.6.リリース

4

2 に答える 2

3

仕事がハングしているかどうかを確認します。もしそうなら..しばらくすると、タスクは実行されません。つまり、最大プールサイズに達した後です。実行が成功した後にスレッドが解放されるかどうか、実装コードを確認してください。

于 2015-09-25T11:31:51.940 に答える