quartz:定时任务框架,主要处理定时任务。
官网:Quartz Enterprise Job Scheduler
1.新建项目
2.配置文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
3.代码
DepartmentQuartzConfig:
package com.xupeng.quartz.config;
import com.xupeng.quartz.job.SyncDepartmentJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Quartz定时任务配置类:部门信息
*/
@Configuration
public class DepartmentQuartzConfig {
/**
* 同步部门信息Job(任务详情)
*/
@Bean
public JobDetail syncDepartmentJobDetail() {
JobDetail jobDetail = JobBuilder.newJob(SyncDepartmentJob.class)
.withIdentity("syncDepartmentJobDetail", "syncDepartmentJobDetail")
.usingJobData("demartmentName", "demartmentName") //设置参数(键值对)
.usingJobData("demartmentUrl", "demartmentUrl")
.usingJobData("demartmentRemark", "demartmentRemark")
.storeDurably() //即使没有Trigger关联时,也不需要删除该JobDetail
.build();
return jobDetail;
}
/**
* 定时任务1:
* 同步用户信息Job(触发器)
*/
@Bean
public Trigger syncDepartmentJobTrigger() {
//每隔5秒执行一次
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
//创建触发器
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(syncDepartmentJobDetail())//关联上述的JobDetail
.withIdentity("syncDepartmentJobTrigger", "syncDepartmentJobTrigger")//给Trigger起个名字
.withSchedule(cronScheduleBuilder)
.build();
return trigger;
}
}
UserQuartzConfig:
package com.xupeng.quartz.config;
import com.xupeng.quartz.job.SyncUserJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Quartz定时任务配置类:用户信息
*/
@Configuration
public class UserQuartzConfig {
/**
* 同步用户信息Job(任务详情)
*/
@Bean
public JobDetail syncUserJobDetail()
{
JobDetail jobDetail = JobBuilder.newJob(SyncUserJob.class)
.withIdentity("syncUserJobDetail","syncUserJobDetail")
.usingJobData("userName", "userName") //设置参数(键值对)
.usingJobData("blogUrl","blogUrl")
.usingJobData("blogRemark","blogRemark")
.storeDurably() //即使没有Trigger关联时,也不需要删除该JobDetail
.build();
return jobDetail;
}
/**
* 同步用户信息Job(触发器)
*/
@Bean
public Trigger syncUserJobTrigger()
{
//每隔5秒执行一次
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
//创建触发器
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(syncUserJobDetail())//关联上述的JobDetail
.withIdentity("syncUserJobTrigger","syncUserJobTrigger")//给Trigger起个名字
.withSchedule(cronScheduleBuilder)
.build();
return trigger;
}
}
SyncDepartmentJob:
package com.xupeng.quartz.job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 同步用户信息Job
*/
public class SyncDepartmentJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//获取JobDetail中传递的参数
String demartmentName = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("demartmentName");
String demartmentUrl = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("demartmentUrl");
String demartmentRemark = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("demartmentRemark");
//获取当前时间
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//打印信息
System.out.println("名称:" + demartmentName);
System.out.println("url:" + demartmentUrl);
System.out.println("remark:" + demartmentRemark);
System.out.println("时间:" + dateFormat.format(date));
System.out.println("----------------------------------------");
}
}
SyncUserJob:
package com.xupeng.quartz.job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 同步用户信息Job
*/
public class SyncUserJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//获取JobDetail中传递的参数
String userName = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("userName");
String blogUrl = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("blogUrl");
String blogRemark = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("blogRemark");
//获取当前时间
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//打印信息
System.out.println("用户名称:" + userName);
System.out.println("博客地址:" + blogUrl);
System.out.println("博客信息:" + blogRemark);
System.out.println("当前时间:" + dateFormat.format(date));
System.out.println("----------------------------------------");
}
}