定時任務一般是項目中都需要用到的,可以用於定時處理一些特殊的任務。
在spirngboot中使用定時任務變的特別簡單,只需要在啓動類上增加一個@EnableScheduling註解即可。默認情況下,如果什麼都不進行配置,就會導致一個問題,系統中所有的定時任務都是使用的一個線程去執行的,也就是說,如果如果同一個時刻有2個定時任務需要執行,那麼只可能有一個定時任務在執行,如果要解決這個問題可以定義一個自定的任務調度線程池即可。
解決方案:
上面這個圖是從 org.springframework.scheduling.annotation.EnableScheduling 這個註解類上的解釋上截出來的。大致上就是我們定義一個 TaskScheduler 類型的bean即可解決這個問題。
實現功能:
啓動3個定時任務,每隔1s打印出一句話,觀看是同一個線程打印的還是不同的線程打印的。
實現功能:
1、在啓動類上增加@EnableScheduling註解
2、配置一個類型爲 TaskScheduler類型的bean (可以將這個類型的bean刪除,看程序輸出的結果)
3、編寫一個任務類,每隔1s輸出內容
一、pom文件的內容
Java代碼
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.huan</groupId>
- <artifactId>springboot-task</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>springboot-task</name>
- <description>spring boot整合定時任務+</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.8.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <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>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
二、編寫啓動類
三、編寫任務類
四、執行結果