2015-09-22 6 views
0

Как написано в официальной документацииSpring столкновения планировщик при использовании fixedDelay

.. фиксированной задержкой, а это означает, что период будет измеряться с момента завершения каждого предыдущего вызова

Но я есть проблемы с ним. Мой код с fixedDelayString

@Scheduled(fixedDelayString = "${schedule.time:2000}") 
public void tasksScheduler() { 
    LOG.trace("starts"); 
    try { 
     Thread.sleep(new Random().nextInt(5000)); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    LOG.trace("completed"); 
} 

имеет порядок в моей локальной машине

2015-09-22 10:16:11,098 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 10:16:12,707 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 10:16:15,708 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 10:16:18,768 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 10:16:21,769 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 10:16:23,882 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 10:16:26,882 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 10:16:31,073 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 10:16:34,074 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 

Но у меня есть столкновений в моей servel. Журналы сервера ниже

2015-09-22 05:26:21,315 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:26:25,593 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:26:28,594 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:26:32,169 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:26:35,170 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:26:38,608 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:26:41,608 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:26:44,341 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:26:47,342 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:26:49,808 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:26:50,400 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:26:50,734 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:26:53,401 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:26:53,735 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:26:54,074 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:26:56,267 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:26:57,075 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:26:58,604 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:26:59,268 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:27:01,605 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:27:03,176 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:27:03,375 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:27:06,177 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:27:06,376 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:27:07,253 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:27:10,254 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:27:10,691 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:27:12,737 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:27:13,692 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:27:15,450 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:27:15,738 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:27:16,940 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 
2015-09-22 05:27:18,450 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] starts 
2015-09-22 05:27:19,941 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] starts 
2015-09-22 05:27:20,727 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-3-thread-1] completed 
2015-09-22 05:27:22,741 TRACE r.u.s.i.AutoRegistrationAccountScheduler [pool-6-thread-1] completed 

Я попытался определить пользовательский планировщик, как

<task:annotation-driven scheduler="myScheduler"/> 
<task:scheduler id="myScheduler" pool-size="1"/> 

Но это не помогает мне, столкновения все еще существуют

2015-09-22 10:50:29, [myScheduler-1] starts 
2015-09-22 10:50:32, [myScheduler-1] completed 
2015-09-22 10:50:34, [myScheduler-1] starts 
2015-09-22 10:50:36, [myScheduler-1] completed 
2015-09-22 10:50:38, [myScheduler-1] starts 
2015-09-22 10:50:39, [myScheduler-1] completed 
2015-09-22 10:50:41, [myScheduler-1] starts 
2015-09-22 10:50:42, [myScheduler-1] starts 
2015-09-22 10:50:43, [myScheduler-1] completed 
2015-09-22 10:50:45, [myScheduler-1] starts 
2015-09-22 10:50:47, [myScheduler-1] completed 
2015-09-22 10:50:47, [myScheduler-1] completed 
2015-09-22 10:50:49, [myScheduler-1] starts 
2015-09-22 10:50:49, [myScheduler-1] starts 
2015-09-22 10:50:49, [myScheduler-1] completed 
2015-09-22 10:50:51, [myScheduler-1] starts 
2015-09-22 10:50:51, [myScheduler-1] completed 
2015-09-22 10:50:53, [myScheduler-1] starts 
2015-09-22 10:50:54, [myScheduler-1] completed 
2015-09-22 10:50:56, [myScheduler-1] starts 
2015-09-22 10:50:57, [myScheduler-1] completed 
2015-09-22 10:50:59, [myScheduler-1] starts 
2015-09-22 10:51:00, [myScheduler-1] completed 
2015-09-22 10:51:02, [myScheduler-1] starts 
2015-09-22 10:51:03, [myScheduler-1] completed 
2015-09-22 10:51:04, [myScheduler-1] completed 
2015-09-22 10:51:05, [myScheduler-1] starts 
2015-09-22 10:51:06, [myScheduler-1] starts 
2015-09-22 10:51:10, [myScheduler-1] completed 
2015-09-22 10:51:10, [myScheduler-1] completed 
2015-09-22 10:51:12, [myScheduler-1] starts 
2015-09-22 10:51:12, [myScheduler-1] starts 
2015-09-22 10:51:16, [myScheduler-1] completed 
2015-09-22 10:51:17, [myScheduler-1] completed 
2015-09-22 10:51:18, [myScheduler-1] starts 
2015-09-22 10:51:19, [myScheduler-1] starts 
2015-09-22 10:51:19, [myScheduler-1] completed 
2015-09-22 10:51:19, [myScheduler-1] completed 
2015-09-22 10:51:21, [myScheduler-1] starts 

Почему fixedDelay работать так? Как я могу убедиться, что не будет никаких столкновений?

+0

Его ничего общего с вашей серверной машиной. Если вы видите журналы, вы можете увидеть, что в настоящее время активны два разных пула потоков, т. Е. Пул-3 и пул-6, и они работают на собственном пуле потоков с соответствующими фиксированными ссылками на задержки. – Avis

+0

Извините, но я не понимаю, что вы хотите сказать. Да, я вижу два пула пулов пула-3 и пул-6, но я не знаю, как это относится к срокам. Поскольку я думаю, что когда возникает истечение срока события, весна принимает один из существующего потока из пула потоков и вызывает метод, используя этот поток. Не правда ли? – kraken

+0

Я попытался определить пользовательский планировщик, но это мне не помогает, конфликты все еще существуют. Я обновил вопрос – kraken

ответ

0

Это произошло из-за двойной инициализации контекста приложения. Я узнал об этом, когда я добавил сообщение журнала в конструктор моего компонента.

public AutoRegistrationAccountScheduler() { 
    LOG.trace("I'm initialized! Time = " + new Date() + ", this = " + this); 
} 

А также две линии в моих журналах

2015-09-23 03:38:07,917 INFO o.s.w.c.ContextLoader [localhost-startStop-1] Root WebApplicationContext: initialization started 
.... 
2015-09-23 03:38:22,112 INFO o.s.w.c.ContextLoader [pool-3-thread-1] Root WebApplicationContext: initialization started 

Тогда я решил сравнить конфигурации TOMCAT (местное и производство) и нашли там ненужные строки, является причиной инициализации моего второго веб-приложения

<Context path="/" docBase="ROOT"> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
</Context> 

После удаления этих строк все работает так, как я ожидал.