本指南將指導你完成使用Spring調度任務的步驟。html
你將構建一個應用程序,使用Spring的@Scheduled
註解每五秒打印一次當前時間。java
你還能夠將代碼直接導入IDE:git
請執行如下操做:github
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。@EnableWebMvc
,但Spring Boot會在類路徑上看到spring-webmvc時自動添加它,這會將應用程序標記爲Web應用程序並激活關鍵行爲,例如設置DispatcherServlet
。@ComponentScan
告訴Spring在hello
包中查找其餘組件、配置和服務,容許它找到控制器。main()
方法使用Spring Boot的SpringApplication.run()
方法來啓動應用程序,你是否注意到沒有一行XML?也沒有web.xml文件,此Web應用程序是100%純Java,你無需處理配置任何管道或基礎結構。
@EnableScheduling
確保建立後臺任務執行程序,沒有它,就沒有任何調度。
你能夠使用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