這周總算是找到了狀態,天天有時間就敲敲代碼,感受充實了好多,也正由於這種狀態,才使得我順利達到了上次彙報確立的目標,同時讓我感慨的,就是目標的重要性,若是沒有明確的目標,項目想要順利往下進行着實有點難。
以前寫的登陸組件都是按照教程寫的,因此打算提升一下,寫點教程上沒有的,雖然說也得去各類博客上查吧,因而選擇了自動推送功能的開發。html
博客上寫了好多關於實現自動任務的方法,我就選擇了比較簡單的一種,畢竟有的複雜到還要下載SQL文件,數據表多達十幾個,暫時也不知道要不要記錄推送任務執行狀況,因此選擇了Spring自帶的@Scheduled註解方法。
首先就是聲明依賴:java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
以後使用MVN安裝依賴便可web
而後在啓動類上添加@EnableScheduling註解spring
SpringBootApplication @EnableAsync // 啓用異步 @ServletComponentScan @EnableScheduling // 啓用定時任務 public class LogApplication { public static void main(String[] args) { SpringApplication.run(LogApplication.class, args); } }
以後就是新建java類,添加方法便可,在本項目中,新建timingtask文件夾,新建pushTask.java做爲定時任務實現類文件tomcat
@Component public class pushTask { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(currentTime); // @Scheduled(cron = "${time.cron}") public void runTask(){ System.out.println("執行定時任務" + dateString); } }
@component (把pushTask實例化到spring容器中)
@scheduled (用來開啓定時任務)
corn裏面寫的是執行的時間,這裏把時間信息放到了配置文件中:異步
time: cron: 0 0 8 ? * *
corn有着本身的語法,像上面就是天天上午八點執行自動任務
cron表達式詳解
在線Cron表達式生成器
@Scheduled註解下的方法即是自動執行的方法。spring-boot
下面以執行時間在12:57:50的方法爲例
查看後臺日誌信息:測試
2020-03-20 12:57:24.120 INFO 22826 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8114 (http) with context path '' 2020-03-20 12:57:24.121 INFO 22826 --- [ main] club.yunzhi.log.LogApplication : Started LogApplication in 2.635 seconds (JVM running for 3.022) 執行定時任務2020-03-20 12:57:23
方法執行的時間與主機上的時間相同,可是對於SpringBoot獲取的時間戳來講,時間上仍是有差距的,並且每次差距都不一樣。日誌
後來添加了一個按秒執行的方法run()code
@Scheduled(cron="*/${time.interval} * * * * *") void run() { System.out.println("每五秒執行 " + dateString); }
配置文件
time: #特定時間 cron: 50 05 13 ? * * #間隔秒數 interval: 5
而後看一下日誌信息:
2020-03-20 13:14:46.330 INFO 28915 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8114 (http) with context path '' 2020-03-20 13:14:46.332 INFO 28915 --- [ main] club.yunzhi.log.LogApplication : Started LogApplication in 2.607 seconds (JVM running for 3.029) 每五秒執行 2020-03-20 13:14:45 每五秒執行 2020-03-20 13:14:45 每五秒執行 2020-03-20 13:14:45 每五秒執行 2020-03-20 13:14:45
發現時間戳都是同樣的,後來我看了一下主機時間,發現原來時間戳的時間是程序啓動的時間,並非隨時獲取的時間。
至於成不成功,還要通過許多測試才能下結論,以後打算結合宇軒開發的機器人測試一下定時任務,看狀況再改進。
@Scheduled註解各參數詳解
spring boot 幾種定時任務的實現方式
SpringBoot2.0集成Quartz