Springboot通過Scheduled實(shí)現(xiàn)定時任務(wù)代碼
定時任務(wù)一般會存在中大型企業(yè)級項目中,為了減少服務(wù)器、數(shù)據(jù)庫的壓力往往會采用時間段性的去完成某些業(yè)務(wù)邏輯。比較常見的就是金融服務(wù)系統(tǒng)推送回調(diào),一般支付系統(tǒng)訂單在沒有收到成功的回調(diào)返回內(nèi)容時會持續(xù)性的回調(diào),這種回調(diào)一般都是定時任務(wù)來完成的。還有就是報表的生成,我們一般會在客戶訪問量過小的時候來完成這個操作,那往往都是在凌晨。這時我們也可以采用定時任務(wù)來完成邏輯。SpringBoot為我們內(nèi)置了定時任務(wù),我們只需要一個注解就可以開啟定時為我們所用了。
在開發(fā)中,定時任務(wù)是常見的功能,在spring boot 下開發(fā)定時任務(wù)其實(shí)很簡單,具體代碼如下:
1、配置依賴包pom.xml
由于默認(rèn)的maven倉庫經(jīng)常訪問不了,這里采用了阿里云的maven倉庫鏡像。
<?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.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-scheduled</name>
<description>Demo project for Spring Boot</description>
<!-- 阿里云maven倉庫 -->
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.5.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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
2、定制任務(wù)場景
定時任務(wù)實(shí)現(xiàn),提供固定周期、固定周期延遲間隔和制定時間點(diǎn)執(zhí)行等場景。采用@Scheduled注解進(jìn)行標(biāo)注。
ExampleTimer.java
package com.example;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ExampleTimer {
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 10000)
public void timerRate() {
System.out.println(dateFormat.format(new Date()));
}
//第一次延遲1秒執(zhí)行,當(dāng)執(zhí)行完后2秒再執(zhí)行
@Scheduled(initialDelay = 1000, fixedDelay = 2000)
public void timerInit() {
System.out.println("init : "+dateFormat.format(new Date()));
}
//每天20點(diǎn)16分50秒時執(zhí)行
@Scheduled(cron = "50 16 20 * * ?")
public void timerCron() {
System.out.println("current time : "+ dateFormat.format(new Date()));
}
}
3、啟動應(yīng)用程序
啟動程序,需要增加@EnableScheduling注解.
SpringBootScheduledApplication.java
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SpringBootScheduledApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootScheduledApplication.class, args);
}
}
4、輸出結(jié)果
20:16:27 init : 20:16:28 init : 20:16:30 init : 20:16:32 init : 20:16:34 init : 20:16:36 20:16:37 init : 20:16:38 init : 20:16:40 init : 20:16:42 init : 20:16:44 init : 20:16:46 20:16:47 init : 20:16:48 current time : 20:16:50 init : 20:16:50 init : 20:16:52 init : 20:16:54
總結(jié)
以上就是本文關(guān)于Springboot通過Scheduled實(shí)現(xiàn)定時任務(wù)代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Struts2學(xué)習(xí)筆記(4)-通配符的使用
本文主要介紹Struts2中通配符的使用,簡單實(shí)用,希望能給大家做一個參考。2016-06-06
關(guān)于MyBatis的foreach標(biāo)簽常用方法
這篇文章主要介紹了關(guān)于MyBatis的foreach標(biāo)簽常用方法,foreach 標(biāo)簽可以用來遍歷數(shù)組、列表和 Map 等集合參數(shù),實(shí)現(xiàn)批量操作或一些簡單 SQL 操作,需要的朋友可以參考下2023-05-05
mybatis 插件: 打印 sql 及其執(zhí)行時間實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猰ybatis 插件: 打印 sql 及其執(zhí)行時間實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
springboot + jpa實(shí)現(xiàn)刪除數(shù)據(jù)的操作代碼
這篇文章主要介紹了springboot + jpa實(shí)現(xiàn)刪除數(shù)據(jù)的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-05-05
springboot使用Validator校驗(yàn)方式
這篇文章主要介紹了springboot使用Validator校驗(yàn)方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-01-01
Maven的國內(nèi)鏡像(快速解決jar下載過慢的問題)
下面小編就為大家?guī)硪黄狹aven的國內(nèi)鏡像(快速解決jar下載過慢的問題)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
java自動根據(jù)文件內(nèi)容的編碼來讀取避免亂碼
這篇文章主要介紹了java自動根據(jù)文件內(nèi)容的編碼來讀取避免亂碼,需要的朋友可以參考下2014-02-02

