Heim > Fragen und Antworten > Hauptteil
Die Aufgabe wurde ursprünglich jeden Tag von Montag bis Freitag um 1 Uhr morgens ausgeführt. Nachdem ich das Protokoll überprüft hatte, stellte ich fest, dass sie am Sonntag um 20:00 Uhr ausgeführt wurde. Um die möglichen Gründe herauszufinden, handelt es sich bei dem Server um eine Single-Core-CPU.
Zusätzlich: Es gibt zwei ABs in meiner Klasse für geplante Aufgaben. Geplante Aufgaben, Aufgabe A wird von Montag bis Freitag um 1 Uhr ausgeführt (@Scheduled(cron = "0 0 1 ? MON-FRI")), Aufgabe B ist jeden Tag um 3 Uhr ausgeführt (@Scheduled(cron = "0 0 3 ? *")), überprüfen Sie das Protokoll und stellen Sie fest, dass von Montag bis Freitag zuerst Aufgabe A und dann Aufgabe B, also B, ausgeführt wird wird ausgeführt, ohne bis 3 Uhr zu warten; wenn es Samstag und Sonntag ist, wird Aufgabe B um 3 Uhr ausgeführt, aber Aufgabe A wurde am Sonntag um 20:00 Uhr ausgeführt. . .
过去多啦不再A梦2017-05-17 10:04:53
我猜测你并没有指定定时任务的pool size,所以默认所有schedule的共用一个线程。需要指定schedule 的pool size大小
xml
<task :annotation-driven scheduler ="myScheduler" />
<task :scheduler id ="myScheduler" pool-size ="10" />
bean
@Bean(destroyMethod = "shutdown")
public Executor taskScheduler() {
return Executors.newScheduledThreadPool(10);
}
补充:
共用一个线程将带来严重的问题。如果A任务没有在2小时内执行完,那么B任务的执行时间将延后,甚至不执行。