6. 任務調度
本指南將引導您完成使用Spring任務調度的步驟。閱讀原文
1. 你將會構建什麽?
您將構建一個應用程序,該應用程序使用Spring的@Scheduled 註解每5秒打印一次當前時間。
2. 你將需要準備什麽?
-
大約十五分鐘
-
一個喜歡的文本編輯器或者IDE
-
JDK 1.8 或者更高版本
-
Gradle 4+ 或者 Maven 3.2+
-
你也可以導入代碼到IDE中
-
Spring Tool Suite (STS)
-
IntelliJ IDEA
-
3. 如何實現這個指南?
像大多數Spring入門指南一樣,您可以從頭開始並完成每個步驟,也可以繞過已熟悉的基本設置步驟。 無論哪種方式,你最終得到工作代碼。
1. 打開STS,New ————> Import Spring Getting Started Content
2. 輸入sche 搜索找到Scheduling Tasks
Tips: Build Type 選擇Maven, Code Style 我們全部勾選,這樣可以生成一個寫好的代碼和一個空白的Project,這樣很方便我們學習和研究。
3. 點擊Finish之後項目已經構建完成,現在讓我們創建一個scheduled task 類
src/main/java/hello/ScheduledTasks.java
package hello; import java.text.SimpleDateFormat;import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduledTasks { private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000) public void reportCurrentTime() { log.info("The time is now {}", dateFormat.format(new Date())); } }
Scheduled註解定義了特定方法的運行時間。 註意:此示例使用fixedRate,它指定從每次調用的開始時間開始測量的方法調用之間的時間間隔。 還有其他選項,比如fixedDelay,它指定了從任務完成之後測量的調用之間的時間間隔。 您還可以使用@Scheduled(cron =“...”)表達式來執行更復雜的任務計劃。
4.啟用計劃
雖然計劃任務可以嵌入到Web應用程序和WAR文件中,但下面演示的更簡單的方法會創建一個獨立的應用程序。 您將所有內容打包到一個單獨的,可執行的JAR文件中,由一個良好的舊Java main()方法驅動。
src/main/java/hello/Application.java
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class); } }
@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確保創建後臺任務執行程序。 沒有它,沒有任何計劃。
5. 編譯一個可執行的Jar
您可以使用Gradle或Maven從命令行運行應用程序。 或者您可以構建一個包含所有必需的依賴項,類和資源的可執行JAR文件,並運行該文件。 這使得在整個開發生命周期內跨越不同環境等,將服務作為應用程序發布,版本化和部署變得非常容易。
執行命令後我們可以在Target目錄下看到生成的可執行 jar
如果您正在使用Gradle,則可以使用./gradlew bootRun運行該應用程序。 或者您可以使用./gradlew構建構建JAR文件。 然後你可以運行JAR文件:
java -jar build/libs/gs-scheduling-tasks-0.1.0.jar
如果您使用的是Maven,則可以使用./mvnw spring-boot:run來運行該應用程序。 或者,您可以使用./mvnw clean包構建JAR文件。 然後你可以運行JAR文件:
java -jar target/gs-scheduling-tasks-0.1.0.jar
上述過程將創建一個可運行的JAR。 您也可以選擇構建經典的WAR文件。
記錄輸出顯示,您可以從日誌中看到它在後臺線程上。 你應該看到你的計劃任務每5秒觸發一次:
源碼:點擊查看
6. 任務調度