Spring Boot中引入定時任務

超頻化石魚發表於2018-12-06

對於工程中需要定時執行的一些任務,例如每天0點向資料庫插入資料,每隔五分鐘同步一次快取等,都可以通過Spring Boot的定時任務來解決。

pom.xml新增依賴

依賴只需要spring-boot-starter

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
</dependency>

在主類中啟用定時功能

在主類前新增@EnableScheduling來啟用定時功能:

@SpringBootApplication
@EnableScheduling
public class XXXApplication {
	public static void main(String[] args) {
		SpringApplication.run(XXXApplication.class, args);
	}
}

建立定時任務類

可以為定時任務單獨建立一個資料夾,在其下新增一個java類:

@Component
public class ScheduleTask {
    // 每天01:30:00執行定時任務
    @Scheduled(cron="00 30 01 * * *")
    private void doMyScheduleTask(){
        System.out.println("this is a scheduler task for day");
    }

    // 每隔1秒執行一次定時任務
    @Scheduled(fixedRate=1000)
    private void doMyScheduleTask2(){
        System.out.println("this is a scheduler task for second");
    }
}

其中:

  1. 類必須使用@Component註解來注入到Spring中。
  2. 函式必須使用@Scheduled註解來標記為定時執行函式。
  3. @Scheduled註解還用於設定定時間隔。
  4. 使用@Component@Scheduled註解Spring即可實現定時執行任務功能,不需要進行任何額外設定。

關於定時間隔:

  • @Scheduled(cron="00 30 01 * * *"):每天01:30:00執行定時任務。其時間設定為:秒 分 時 日 月 年。*表示所有。
  • @Scheduled(fixedRate=1000):每隔1秒執行一次定時任務。無論上次任務是否已執行完。
  • @Scheduled(fixedDelay=1000):上次任務執行完成後,等待1秒再執行一次定時任務。
  • @Scheduled(initalDelay=5000, fixedRate=1000):第一次任務延遲5秒執行,之後每隔1秒執行一次定時任務。

相關文章