簡體   English   中英

Spring / Java中的調度任務

[英]Scheduling Task in Spring/Java

我正在產生一個線程,它將繼續從數據庫中提取大量記錄並將它們放入隊列中。 該線程將在服務器負載上啟動。 我希望這個線程始終處於活動狀態。 如果數據庫中沒有記錄,我希望它等待一段時間后再次檢查。 我正在考慮使用spring任務調度程序來安排這個,但不確定這是否正確,因為我只希望我的任務啟動一次。 在Spring中實現這個的好方法是什么?

此外,我需要進行邊界檢查,如果我的線程發生故障(由於任何錯誤或異常情況),它應該在一段時間后重新實例化。

我可以通過使用線程通信方法在java中完成所有這些操作,但只是嘗試在Spring或Java中可用於此類場景。

任何建議或指針都會有所幫助。

您可以使用@Scheduled批注來運行作業。 首先使用@Scheduled注釋的方法創建一個類。

public class GitHubJob {

   @Scheduled(fixedDelay = 604800000)
   public void perform() {
      //do Something
    }
}

然后在配置文件中注冊此類。

彈簧的context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<tx:annotation-driven/>
<task:annotation-driven scheduler="myScheduler"/>

<task:scheduler id="myScheduler" pool-size="10"/>
<bean id="gitHubJob" class="org.tothought.spring.jobs.GitHubJob"/>

</beans>

有關計划的更多信息,請訪問Spring Docs

@Scheduled(fixedDelay=3600000)
private void refreshValues() {
   [...]
}

每小時運行一次任務。 它必須是無效的並且不接受任何參數。 如果使用Spring的Java配置,則還需要將注釋@EnableScheduling添加到@Configuration類之一。

您可以嘗試使用Quartz調度程序。 http://quartz-scheduler.org/這將允許您指定任務執行之間的持續時間。 您可以設置一個標志(布爾值),表示該類之前是否已運行,以避免重復您只想運行“第一次”的代碼。

Spring為調度任務提供了開箱即用的支持。 這里是最新3.2.x版本spring的文檔,但請查看您正在使用的版本的文檔。 看起來它在引擎蓋下使用Quartz來安排任務。

我認為你的要求只是常規的senario石英或彈簧調度框架非常好。 但你想創造一種特殊的方法來實現它。 我的建議是保持簡單和愚蠢。 spring scheudling將通過池化來利用您的工作線程,而不是一直運行它。

從統計數據來看,檢查工人類的日志很容易。 如果要在Web控制台中查看統計信息,則需要記錄worker的登錄數據庫。 我相信你能以正常方式輕松搞定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM