1. 程式人生 > >6. 任務調度

6. 任務調度

alt ron 處理 tex ted ram {} 準備 href

本指南將引導您完成使用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. 任務調度