標籤:

【spring指南系列】計劃任務

本指南將指導您完成使用Spring計劃任務(即大家常說的定時任務)的步驟。

What you』ll build

你將構建一個應用程序,使用Spring的@ Scheduled注釋每五秒列印一次當前時間。

What you』ll need

  • 約15分鐘

  • 最喜歡的文本編輯器或IDE

  • JDK 1.8或更高版本

  • Gradle 2.3+或Maven 3.0+

  • 您也可以從本指南導入代碼,以及直接在Spring Tool Suite(STS)中查看網頁,並從那 里開始工作 。

How to complete this guide

與大多數Spring 入門指南一樣,您可以從頭開始並完成每個步驟,也可以繞過已經熟悉的基本設置步驟。 無論如何,你最終得到工作代碼。 要從頭開始, 請轉到使用Gradle構建.

要跳過基本操作,請執行以下操作:

  • Download 並解壓縮本指南的源代碼倉庫,或使用 Git: git clone spring-guides/gs-scheduling-tasks

  • cd 到 gs-scheduling-tasks/initial

  • 跳轉到Create a scheduled task.

當你做完這一切, 你可以根據 gs-scheduling-tasks/complete中的代碼檢查結果.

Build with Gradle

見 使用RESTful Web服務

Build with Maven

見 使用RESTful Web服務

Build with your IDE

  • 閱讀如何通過本指南直接導入Spring Tool Suite。

  • 閱讀如何在IntelliJ IDEA上使用本指南。

創建計劃任務

完成項目設置後,您可以創建一個計劃任務。

src/main/java/hello/ScheduledTasks.java

package hello;nnimport java.text.SimpleDateFormat;nimport java.util.Date;nnimport org.slf4j.Logger;nimport org.slf4j.LoggerFactory;nimport org.springframework.scheduling.annotation.Scheduled;nimport org.springframework.stereotype.Component;nn@Componentnpublic class ScheduledTasks {nn private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);nn private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");nn @Scheduled(fixedRate = 5000)n public void reportCurrentTime() {n log.info("The time is now {}", dateFormat.format(new Date()));n }n}n

Scheduled註解定義了一個特定方法在何時運行。 注意:此示例使用fixedRate,它指定從每次調用的開始時間開始測量的方法調用之間的間隔。 有[其他選項](34. Task Execution and Scheduling),如fixedDelay,其中 指定從任務完成起測量的調用之間的間隔。 您還可以[使用@Scheduled(cron=". . .")`表達式來進行更複雜的任務調度]((CronSequenceGenerator (Spring Framework 4.3.5.RELEASE API)).

啟用計劃任務

儘管計劃任務可以嵌入在Web應用程序和WAR文件中,但下面演示的更簡單的方法創建了一個獨立的應用程序。 你把一切都包裝在一個可執行的JAR文件中,由一個大家初學Java時的Javamain()方法驅動。src/main/java/hello/Application.java

package hello;nnimport org.springframework.boot.SpringApplication;nimport org.springframework.boot.autoconfigure.SpringBootApplication;nimport org.springframework.scheduling.annotation.EnableScheduling;nn@SpringBootApplicationn@EnableSchedulingnpublic class Application {nn public static void main(String[] args) throws Exception {n SpringApplication.run(Application.class);n }n}n

@SpringBootApplication是一個很方便的註解,查看其源碼可以發現添加了以下所有內容:

  • @Configuration將類標記為應用程序上下文的bean定義的源。

  • @EnableAutoConfiguration告訴Spring Boot根據類路徑設置,其他bean和各種屬性設置開始添加bean。

  • 通常你會為Spring MVC應用程序添加@EnableWebMvc,但是Spring Boot在類路徑上看到** spring-webmvc **時會自動添加它。這將應用程序標記為Web應用程序,並激活關鍵行為,如設置一個「DispatcherServlet」。

  • @ComponentScan告訴Spring在hello包中尋找其他組件,配置和服務,允許它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程序。你注意到沒有一行XML?沒有** web.xml **文件。這個Web應用程序是100%純Java,你不必處理配置任何管道或基礎設施。

@EnableScheduling 確保創建了後台任務執行器。沒有它,鬼知道什麼時候運行定時計劃任務,更不用說執行了。

構建可執行JAR

您可以使用Gradle或Maven從命令行運行應用程序。 或者,您可以構建單個可執行文件,其中包含所有必需的依賴關係,類和資源,並運行它。 這使得在整個開發生命周期中,易於跨不同環境將服務作為應用程序進行發布,維護版本和部署等等。

如果您使用Gradle,可以使用./gradlew bootRun運行應用程序。 或者你可以使用./gradlew build來構建JAR文件。 然後可以運行JAR文件:

java -jar build/libs/gs-scheduling-tasks-0.1.0.jarn

如果您使用Maven,可以使用 ./mvnw spring-boot:run.運行應用程序。 或者你可以用./mvnw clean package構建JAR文件。 然後可以運行JAR文件:

java -jar target/gs-scheduling-tasks-0.1.0.jarn

**上面的過程將創建一個可運行的JAR。 您也可以選擇build a classic WAR file

將顯示日誌輸出,你可以從日誌中看到它在後台線程上運行。 你應該會看到你的預定任務每5秒鐘觸發一次:

2016-08-25 13:10:00.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:00n2016-08-25 13:10:05.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:05n2016-08-25 13:10:10.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:10n2016-08-25 13:10:15.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:15n

最後

恭喜! 您已使用計劃任務創建應用程序。此技術適用於任何類型的應用程序。

系列回顧:

【spring指南系列】使用RESTful Web服務

【spring 指南系列】如何更好的設計RESTful API

  • 翻譯自:Scheduling Tasks

  • 本人同步博客:一葉知秋

推薦閱讀:

Spring Boot 整合 Redis 實現緩存操作
Spring探秘,妙用BeanPostProcessor
史上最簡單的SpringCloud教程: docker部署spring cloud項目

TAG:Spring | SpringBoot |