一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot定時任務兩種(Spring Schedule 與 Quartz 整合 )實現方法

SpringBoot定時任務兩種(Spring Schedule 與 Quartz 整合 )實現方法

2020-08-28 10:17JavaNoob Java教程

本篇文章主要介紹了SpringBoot定時任務兩種(Spring Schedule 與 Quartz 整合 )實現方法,詳細的介紹了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 = 時間間隔 )

?
1
2
3
4
5
6
7
8
9
10
11
12
@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)
  public void fixedDelayJob() throws InterruptedException {
    TimeUnit.SECONDS.sleep(2);
    System.out.println("[FixedDelayJob Execute]"+fdf.format(new Date()));
  }
}

固定間隔時間 @Scheduled(fixedRate = 時間間隔 )

?
1
2
3
4
5
6
7
8
9
10
11
@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)
  public void fixedRateJob() {
    System.out.println("[FixedRateJob Execute]"+fdf.format(new Date()));
  }
}

Corn表達式 @Scheduled(cron = Corn表達式)

?
1
2
3
4
5
6
7
8
9
10
11
@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 * * * * ?")
  public void cronJob() {
    System.out.println("[CronJob Execute]"+fdf.format(new Date()));
  }
}

Spring Boot 整合 Quartz 實現定時任務

添加Maven依賴

?
1
2
3
4
5
6
7
8
<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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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 具體實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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;
  }
}

具體使用 (摘取自項目代碼):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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
  public void addQuartz(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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人的天堂日本 | 欧美一级欧美一级高清 | 草莓丝瓜芭乐樱桃榴莲色多黄 | 含羞草传媒一天免费看下 | 韩国美女被的免费视频 | 岛国最新资源网站 | 99热国产这里只有精品 | 午夜一个人在线观看完整版 | 天天做日日做 | 国产精品夜夜爽张柏芝 | 国产专区日韩精品欧美色 | 免费片在线观看 | 无人视频在线观看完整版高清 | 国产日本久久久久久久久婷婷 | 色亚州| 久久re视频这里精品一本到99 | 明星h文集合短篇小说 | 国产小视频在线播放 | 俄罗斯一级淫片 | 国产91在线精品狼人 | 免费视频片在线观看 | 日本一级不卡一二三区免费 | 99国产情在线视频 | 日本性爱 | 506rr亚洲欧美 | 人人斗地主 | 99热视频| 亚洲第一页综合 | 美国雪白人妖sarina | 国产一区二区视频在线观看 | 国产精品久久国产三级国电话系列 | 青青草原国产 | 色天天色综合 | 97se狠狠狠狠狼亚洲综合网 | 深夜福利影院 | 99久久香蕉国产综合影院 | 精品久久免费观看 | 日本性生活免费看 | 国亚洲欧美日韩精品 | 青青艹视频在线 | 美女脱了内裤让男生玩屁股 |