私はSpringを使用しており、データベースに対していくつかの操作を行うスケジュールされたタスクがあります。 私はこのタスクが各プールで実行されているのではなく、1回だけ実行したいと思います。たとえば、私が読ん私のログファイルに:スケジュールされたタスクは一度だけ実行でき、すべてのスレッドプールで実行することはできませんか?
2016-08-04 01:01:01 [pool-2-thread-1] INFO c.w.c.FleetAndCarControllerImpl - SCHEDULED ACTIVITY TO DELETE OLD NOTIFICATIONS
2016-08-04 01:01:01 [pool-3-thread-1] INFO c.w.c.FleetAndCarControllerImpl - SCHEDULED ACTIVITY TO DELETE OLD NOTIFICATIONS
私は、この設定があります。
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(100);
executor.setQueueCapacity(100);
executor.initialize();
return executor;
}
を、これはタスクです:
//This task is executed every day at 01:01 a.m.
@Scheduled(cron = "0 1 1 * * ?")
public void smartQuery(){
try {
LOG.info("SCHEDULED ACTIVITY TO DELETE OLD NOTIFICATIONS");
notificationManagementServices.deleteOldNotifications();
} catch (QueryException e) {
ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e);
LOG.error("Threw exception in WakeUpDatabase::smartQuery :" + errorResponse.getStacktrace());
}
}
は、それは可能です感謝
コアプールサイズを「1」に設定します。 –
"このタスクは各スレッドで実行されているとわかりました"どのように正確に把握できましたか? – Kayaman
私のログファイルには、ログメッセージが複数回印刷されています。私はいくつかの行のメインポストを更新しました – luca