SpringBoot的定時任務兩種(Spring Schedule 與 Quartz 整合 )實現
前言
最近在專案中使用到定時任務,之前一直都是使用Quartz 來實現,最近看Spring 基礎發現其實Spring 提供 Spring Schedule 可以幫助我們實現簡單的定時任務功能。
下面說一下兩種方式在Spring Boot 專案中的使用。
Spring Schedule 實現定時任務
Spring Schedule 實現定時任務有兩種方式 1. 使用XML配置定時任務, 2. 使用 @Scheduled 註解。 因為是Spring Boot 專案 可能儘量避免使用XML配置的形式,主要說註解的形式.
Spring Schedule 提供三種形式的定時任務:
固定等待時間 @Scheduled(fixedDelay = 時間間隔 )
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedDelay = SECOND * 2)
publicvoidfixedDelayJob() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
System.out .println("[FixedDelayJob Execute]"+fdf.format(new Date()));
}
}
固定間隔時間 @Scheduled(fixedRate = 時間間隔 )
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedRate = SECOND * 4 )
publicvoidfixedRateJob() {
System.out.println("[FixedRateJob Execute]"+fdf.format(new Date()));
}
}
Corn表示式 @Scheduled(cron = Corn表示式)
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(cron = "0/4 * * * * ?")
publicvoidcronJob() {
System.out.println("[CronJob Execute]"+fdf.format(new Date()));
}
}
Spring Boot 整合 Quartz 實現定時任務
新增Maven依賴
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
Spring Boot 整合 Quartz
Spring 專案整合 Quartz 主要依靠新增 SchedulerFactoryBean 這個 FactoryBean ,所以在maven 依賴中新增 spring-context-support 。
首先新增 QuartzConfig 類 來宣告相關Bean
@Configuration
public class QuartzConfig {
@Autowired
private SpringJobFactory springJobFactory;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(springJobFactory);
return schedulerFactoryBean;
}
@Bean
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
這裡我們需要注意 我注入了一個 自定義的JobFactory ,然後 把其設定為SchedulerFactoryBean 的 JobFactory。其目的是因為我在具體的Job 中 需要Spring 注入一些Service。
所以我們要自定義一個jobfactory, 讓其在具體job 類例項化時 使用Spring 的API 來進行依賴注入。
SpringJobFactory 具體實現:
@Component
public class SpringJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
具體使用 (摘取自專案程式碼):
@Service
public class QuartzEventServiceImpl implements QuartzEventService {
private static final String JOB_GROUP = "event_job_group";
private static final String TRIGGER_GROUP = "event_trigger_group";
@Autowired
private Scheduler scheduler;
@Override
publicvoidaddQuartz(Event event) throws SchedulerException {
JSONObject eventData = JSONObject.parseObject(event.getEventData());
Date triggerDate = eventData.getDate("date");
JobDetail job = JobBuilder.newJob(EventJob.class).withIdentity(event.getId().toString(), JOB_GROUP).usingJobData(buildJobDateMap(event)).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(event.getId().toString(), TRIGGER_GROUP).startAt(triggerDate).build();
scheduler.scheduleJob(job, trigger);
}
原文連結:http://www.cnblogs.com/javanoob/p/springboot_schedule.html
相關推薦
SpringBoot之旅 -- 定時任務兩種(Spring Schedule 與 Quartz 整合 )實現
目的 config object cnblogs java title cor 進行 eat 相關文章 Spring Boot 相關文章目錄 前言 最近在項目中使用到定時任務,之前一直都是使用Quartz 來實現,最近看Spring 基礎發現其實Spring 提供
SpringBoot的定時任務兩種(Spring Schedule 與 Quartz 整合 )實現
前言 最近在專案中使用到定時任務,之前一直都是使用Quartz 來實現,最近看Spring 基礎發現其實Spring 提供 Spring Schedule 可以幫助我們實現簡單的定時任務功能。 下面說一下兩種方式在Spring Boot 專案中的使用。 Spring
spring 定時任務兩種方式
一 springMVC自帶task啟動後加載 上程式碼 首先新增依賴引入task <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.o
spring與quartz整合實現分布式動態創建,刪除,改變執行時間定時任務(mysql數據庫)
ces value 我們 job clu xsd collect 註解 common 背景:因為在項目中用到了定時任務,當時想到了spring的quartz,寫完發現費了很大功夫,光是整合就花了一上午,其中最大的問題就是版本問題,項目中用的是spring3.2.8的版本,查
分散式深度學習的兩種叢集管理與排程的實現方式簡介
為什麼需要叢集管理與排程上文我們簡單介紹了深度學習、分散式CPU+GPU叢集的實現原理,以及分散式深度學習的原理,我們簡單回顧一下:分散式CPU+GPU叢集的實現:GPU叢集並行模式即為多GPU並行中各種並行模式的擴充套件,如上圖所示。節點間採用InfiniBand通訊,節點
Spring Boot與Quartz整合
1.匯入依賴包 <!-- quartz定時器 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artif
Oozie與Coordinator調度講解及系統時區配置與定時觸發兩種配置方式
-- track eno star es2017 alt coo 之前 res 1:修改本地linux時區 查看時區 - 號代表西 + 號 代表東 北京時間是東八區 設置時區的配置文件所在位置 1 cd /usr/share/zoneinfo/
SpringBoot定時任務Schedule使用
在開發中很多時候會用到定時任務, 以前用自定義類繼承TimerTask public class CustomTask extends TimerTask{ @Override public void run() { // 執行業務程式碼 }
springboot 定時任務schedule
測試版本 1.5 和 2.0.4 完全一樣 兩步 1. 配置類 2.job 1、配置類 import org.springframework.context.annotation.Bean; import org.springframework.context
SpringBoot定時任務Schedule (七)
在日常專案執行中,我們總會有需求在某一時間段週期性的執行某個動作。比如每天在某個時間段匯出報表,或者每隔多久統計一次現在線上的使用者量。在springboot中可以有很多方案去幫我們完成定時器的工作,有Java自帶的java.util.Timer類,也有強大的排程器Quart
springboot動態配置定時任務2種方式,整合Quartz多執行緒併發執行多個定時任務配置
我的專案是採用的idea+gradle+springboot專案構建,下面是springboot實現定時任務所需要的jar包 //定時任務使用 compile group: 'org.quartz-scheduler', name: 'quartz', version:
spring整合quartz實現動態定時任務的前臺網頁配置與管理
在實際專案應用中經常會用到定時任務,可以通過quartz和spring的簡單配置即可完成,但如果要改變任務的執行時間、頻率,廢棄任務等就需要改變配置甚至程式碼需要重啟伺服器,這裡介紹一下如何通過quartz與spring的組合實現動態的改變定時任務的狀態的一個實
(原創)js,ajax與springboot之間的兩種傳參方式
目前實現的有兩種傳參方式。請先理解,勿單純複製貼上。 方式一: 前端js: function update(){ var d = {}; d.userId = 30; d.username = "Sunpeng.Guo";
Spring整理系列(08)——spring與quartz整合執行定時任務
專案基於maven進行管理。 一、例項專案程式碼示例: 1、pom.xml檔案所需要的基本jar: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.
C/S和B/S兩種架構區別與優缺點分析
iis 持久化數據 邏輯 刷新 lamp 滿足 tle 擴展 區別 C/S和B/S,是再普通不過的兩種軟件架構方式,都可以進行同樣的業務處理,甚至也可以用相同的方式實現共同的邏輯。既然如此,為何還要區分彼此呢?那我們就來看看二者的區別和聯系。 一、C/S 架構
springboot定時任務
factor 添加 actor 返回值 olt adp 思路分析 web ack (1)思路說明; (a)首先這裏我們需要重新認識一個類ThreadPoolTaskScheduler:線程池任務調度類,能夠開啟線程池進行任務調度。 (b)ThreadPoolTaskSche
springboot定時任務,去掉指定日期
bstr log tex ram static 依賴 測試 form 意思 今天用springboot寫到一個需求:每周定時發送任務,但是要避開法定節假日。 網上找了些博客看,主要參考了https://www.cnblogs.com/lic309/p/4089633
cron 定時任兩種配置方式
card 任務 init 1-1 rop java代碼 exp tor date 第一種:xml文件方式 <bean id="commonTimer" class="com.course.wx.timer.CommonTimer"></bean&
在Listener(監聽器)定時啟動的TimerTask(定時任務)中使用Spring@Service註解的bean
什麽 Language out 獲得 自動 location ext exti 方法 1.有時候在項目中需要定時啟動某個任務,對於這個需求,基於JavaEE規範,我們可以使用Listener與TimerTask來實現,代碼如下: public class TestTask
SpringBoot 定時任務的使用
系統啟動 單獨 initial 2.2.3 cond 調用 串行 context tco 一點知識在JAVA開發領域,目前可以通過以下幾種方式進行定時任務: Timer:jdk中自帶的一個定時調度類,可以簡單的實現按某一頻度進行任務執行。提供的功能比較單一,無法實現復雜的調