2013-12-16 70 views
0

我試圖執行一個使用annotation @Scheduled和一個cron值的方法。 該方法執行但不尊重cron。Spring 3.1 @Scheduled隨機發射

這裏是我的課:我的applicationContext.xml的

@Component 
public class Test { 
    private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); 

    @Scheduled(cron = "*/10 * * * * *") 
    public void run() { 
     LOGGER.debug("run()"); 
    } 
} 

部分:

<task:executor id="myExecutor" pool-size="5"/> 
<task:scheduler id="myScheduler" pool-size="10"/> 
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/> 
<bean id="run" class="xxx.Test"></bean> 

我使用Spring 3.1在我的XML彈簧任務3.1.xsd。

當我開始,我應該有每10秒一條線,我得到這個:

12/16 15:51:20,033 [---] [DEBUG] [Test:31] - run() 
12/16 15:51:29,996 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:09,657 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:10,000 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:34,664 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:22,137 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:34,656 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:39,988 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:49,981 [---] [DEBUG] [Test:31] - run() 
12/16 15:59:07,278 [---] [DEBUG] [Test:31] - run() 

每次執行之間的延遲的每一次變化。我使用FixedRate或FixedDelay進行了測試,但得到的結果相同。

所以這個類是正確的,方法也是,但它隨機發生。

有沒有人有什麼可以導致這種行爲的想法?

我一直在尋找小時,沒有任何成功。將預定部分放在xml而不是java文件中不會改變任何內容,也可以使用cron值的屬性文件進行嘗試。

回答

1

你在

@Scheduled(cron = "*/10 * * * * *") 

cron表達說:「執行此方法對每一秒即由10整除」,換句話說,10,20,30,等等。這就是它看起來像它在做什麼(+/-調度器的精度)

12/16 15:54:09,657 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:10,000 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 

但有時跳過或具有長間隔

12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:34,664 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:22,137 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:34,656 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:39,988 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:49,981 [---] [DEBUG] [Test:31] - run() 
12/16 15:59:07,278 [---] [DEBUG] [Test:31] - run() 

如果TaskScheduler中的線程忙於其他事情或由於某種原因被阻塞,則可能發生這種情況。如果您需要更多信息,您需要提供有關設置的更多詳細信息。

+0

非常感謝您指出任務計劃程序繁忙的想法。我試圖在另一臺計算機上運行我的程序(我的個人計算機,第一臺計算機正在工作),並且工作正常。我想所有在工作中安裝的安全程序都會阻止我的程序正常運行。經過兩天的研究,這個問題解決了!謝謝。 – user2358235

+0

@用戶不客氣。 –