152.Quartz:SpringBoot整合Quartz

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("----------------------------------------");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/120742867