博客
关于我
Spring Boot2.0 集成 Quartz
阅读量:494 次
发布时间:2019-03-07

本文共 3221 字,大约阅读时间需要 10 分钟。

在项目开发中,定时任务是常见需求之一。Spring Boot提供了内置的定时方案,但当任务需求复杂化时,经常需要引入Quartz。以下将从简单到复杂,全面解析两种方案。

Spring Boot内置定时方案

pom.xml配置

仅需引入Spring Boot Starter包即可:

org.springframework.boot
spring-boot-starter

启动类配置

在启动类中添加@EnableScheduling注解:

@SpringBootApplication@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

定时任务实现

创建实现类并使用@Scheduled注解:

  • 方fixedRate方式:
@Component
public class SchedulerTask {
private int count = 0;
@Scheduled(fixedRate = 6000)
private void process() {
System.out.println("this is scheduler task running " + count++);
}
}
  • 使用cron表达式:
@Component
public class Scheduler2Task {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(cron="*/6 * * * * ?", fixedRate=6000)
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}

参数说明

  • fixedRate:每隔固定秒数执行任务。
  • fixedDelay:任务完成后等待固定秒数后再执行。
  • initialDelay:第一次调度的延迟间隔。
  • cron表达式:支持灵活时间设置。

Quartz定时方案介绍

Quartz简介

Quartz是一个开源的任务调度框架,支持复杂定时需求且能与Spring无缝集成。

核心概念

  • Job:定时任务接口。
  • JobDetail:任务详细信息。
  • Trigger:触发器,定义调度规则。
  • Scheduler:调度器,管理任务执行。

Spring Boot整合

在Spring Boot中使用Quartz需如下配置:

org.springframework.boot
spring-boot-starter-quartz

简单示例

定义Job并注册Trigger:

public class SampleJob extends QuartzJob {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello " + this.name + "!");
}
}

配置JobDetail和Trigger:

@Configuration
public class SampleScheduler {
@Bean
public JobDetail sampleJobDetail() {
return JobBuilder.newJob(SampleJob.class)
.withIdentity("sampleJob", "group1")
.usingJobData("name", "World")
.build();
}
@Bean
public Trigger sampleJobTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(sampleJobDetail())
.withIdentity("sampleTrigger", "group1")
.withSchedule(scheduleBuilder)
.build();
}
}

启动定时任务

可以采取以下方式启动:

方式一:在启动类中启动

@SpringBootApplication
public class MainApplication extends CommandLineRunner {
@Autowired
privateatabase database;
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
@Override
public void run(String[] args) throws Exception {
schedulerService.start();
}
}

方式二:集成Spring的@Scheduled注解

public class SchedulerListener {
@Autowired
private SchedulerService schedulerService;
@Scheduled(cron="0 30 11 25 11 ?", enabled=true)
public void schedule() {
schedulerService.start();
}
}

总结

对于简单定时需求,Spring Boot内置方案足够;对复杂批量任务处理,经常选择Quartz。Spring Boot 2.0对Quartz的支持使其在项目中的应用更加流畅。

转载地址:http://ergdz.baihongyu.com/

你可能感兴趣的文章
NSOperation基本操作
查看>>
NSSet集合 无序的 不能重复的
查看>>
NT AUTHORITY\NETWORK SERVICE 权限问题
查看>>
ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
查看>>
nullnullHuge Pages
查看>>
numpy 用法
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>
OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
查看>>
OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
查看>>
OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
查看>>
OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
查看>>
OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
查看>>
OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
查看>>
OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
查看>>
OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
查看>>
OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
查看>>
OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
查看>>
OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
查看>>
oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
查看>>