Spring 指南(調度任務)

調度任務

本指南將指導你完成使用Spring調度任務的步驟。html

將要構建什麼

你將構建一個應用程序,使用Spring的@Scheduled註解每五秒打印一次當前時間。java

須要什麼

  • 大約15分鐘
  • 最喜歡的文本編輯器或IDE
  • JDK 1.8或更高版本
  • Gradle 4+Maven 3.2+
  • 你還能夠將代碼直接導入IDE:git

    • Spring Tool Suite(STS)
    • IntelliJ IDEA

如何完成本指南

請執行如下操做:github

  • 下載並解壓縮本指南的源存儲庫,或使用Git克隆它:web

    git clone https://github.com/spring-guides/gs-scheduling-tasks.git
  • 進入gs-scheduling-tasks/initial

完成後,你能夠根據gs-scheduling-tasks/complete中的代碼檢查結果。spring

建立調度任務

如今你已經設置了項目,能夠建立調度任務。apache

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=". . .")表達式進行更復雜的任務調度segmentfault

啓用調度

雖然調度任務能夠嵌入到Web應用程序和WAR文件中,但下面演示的更簡單的方法建立了一個獨立的應用程序,將全部內容打包在一個可執行的JAR文件中,由main()方法驅動。api

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) {
        SpringApplication.run(Application.class);
    }
}

@SpringBootApplication是一個方便的註解,添加了如下全部內容:mvc

  • @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從命令行運行該應用程序,或者,你能夠構建一個包含全部必需依賴項、類和資源的可執行JAR文件,並運行它,這使得在整個開發生命週期中、跨不一樣環境等將服務做爲應用程序發佈、版本和部署變得容易。

若是你使用的是Gradle,則能夠使用./gradlew bootRun運行該應用程序,或者你能夠使用./gradlew build構建JAR文件,而後你能夠運行JAR文件:

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

若是你使用的是Maven,則能夠使用./mvnw spring-boot:run運行該應用程序,或者你能夠使用./mvnw clean package構建JAR文件,而後你能夠運行JAR文件:

java -jar target/gs-scheduling-tasks-0.1.0.jar
上面的過程將建立一個可運行的JAR,你也能夠選擇構建經典WAR文件。

顯示日誌輸出,你能夠從日誌中看到它在後臺線程上,你應該看到你的調度任務每5秒出發一次:

[...]
2016-08-25 13:10:00.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:00
2016-08-25 13:10:05.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:05
2016-08-25 13:10:10.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:10
2016-08-25 13:10:15.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:15
相關文章
相關標籤/搜索