Quartz
是一个定时任务的调度框架,涉及到的主要概念有以下几个:
Scheduler
:调度器,所有的调度都由它控制,所有的任务都由它管理。
Job
:任务,定义业务逻辑。
JobDetail
:基于Job,进一步封装。其中关联一个Job,并为Job指定更详细的信息。
Trigger
:触发器,可以指定给某个任务,指定任务的触发机制。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
任务 extends QuartzJobBean
@Slf4j
public class FirstJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String now = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
System.out.println("当前时间:"+now);
}
}
@Slf4j
public class SecondJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String now = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
System.out.println("secondJob执行 当前时间:"+now);
}
}
@Configuration
public class QuartzConfig {
private static final String ID = "Job";
@Bean
public JobDetail jobDetail01(){
return JobBuilder.newJob(FirstJob.class)
.withIdentity(ID + "01")
.storeDurably()
.build();
}
@Bean
public SimpleScheduleBuilder simpleScheduleBuilder(){
return SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.withRepeatCount(100);
}
@Bean
public CronScheduleBuilder cronScheduleBuilder(){
return CronScheduleBuilder.cronSchedule("0/5 * * * * ? *");
}
@Bean
public Trigger trigger(){
return TriggerBuilder.newTrigger()
.forJob(jobDetail01())
.withIdentity(ID + "01Trigger")
.withSchedule(simpleScheduleBuilder())
.build();
}
}
spring:
quartz:
auto-startup: true
job-store-type: jdbc
startup-delay: 0
wait-for-jobs-to-complete-on-shutdown: true
overwrite-existing-jobs: false
scheduler-name: myQuartzScheduler
Quartz默认使用
RAMJobStore
存储方式将任务存储在内存中,除了这种方式还支持使用JDBC将任务存储在数据库,为了防止任务丢失,我们一般会将任务存储在数据库中。这里使用mysql进行存储,在quartz的源码包中找到文件
tables_mysql_innodb.sql
,然后在客户端进行运行sql文件。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</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>
如果springboot容器中有Trigger的springbean,则会自动使用JDBC持久化到该数据库中。
原文:https://www.cnblogs.com/mjoe/p/15008119.html