激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看9x视频网站在线观看 | 久久久久一区二区三区 | 99精品国产成人一区二区 | 日本黄色不卡视频 | 极品一级片| 在线a毛片免费视频观看 | 精品在线观看一区二区三区 | 一级一级一级一级毛片 | 最新午夜综合福利视频 | 日本高清在线免费 | 三级18视频| 性欧美大战久久久久久久免费观看 | www.99tv | 日韩视频一区二区三区四区 | 亚洲最新色 | a免费看 | 亚洲男人的天堂在线视频 | 狠狠色成色综合网 | av电影在线观看网站 | 91成人午夜性a一级毛片 | 4399一级成人毛片 | 成人啪啪18免费网站 | 1级片在线观看 | 91网站在线观看视频 | 成人性视频免费网站下载软件 | 美女黄污视频 | 色综合777| 龙床上的呻吟高h | 亚洲国产精品久久久 | 天天干导航| 精品一区二区三区在线观看国产 | 青青草成人av | 精品久久久久久久久久久aⅴ | 亚州欧美在线 | 一级做受大片免费视频 | 成人在线视频免费观看 | 成人男女啪啪免费观看网站四虎 | 极品美女一级毛片 | 久色婷婷 | 国产精品啪 | 高清一区二区在线观看 |