Spring Boot 整合定时调度任务Quartz
2018-03-20 17:04
627 查看
第一:引入maven坐标
第二部:搭建好自己的Spring Boot项目
1.MyJobFactory
package com.example.boot.quartz;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
/**
* @ClassName MyJobFactory
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:46
* @Version v.1.0.0
*/
@Component
public class MyJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
// 调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
// 进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
2.MySchedulerpackage com.example.boot.quartz;
import org.quartz.*;
import org.quartz.impl.StdScheduler;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* @ClassName MyScheduler
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:58
* @Version v.1.0.0
*/
@Component
public class MyScheduler {
public void schedulerJob() throws SchedulerException {
ApplicationContext annotationContext = SpringUtil.getApplicationContext();
Scheduler myScheduler = (StdScheduler) annotationContext.getBean("mySchedulerFactoryBean");
startScheduler1(myScheduler);
startScheduler2(myScheduler);
myScheduler.start();
}
private void startScheduler1(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(MySchedulerJob.class).withIdentity("job1", "jobGroup1").build();
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("5 * * * * ?");
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
}
private void startScheduler2(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(MySchedulerJob2.class).withIdentity("job2", "jobGroup2").build();
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("5 * * * * ?");
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "triggerGroup2")
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
}
}
3.MySchedulerJobpackage com.example.boot.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @ClassName MySchedulerJob
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:54
* @Version v.1.0.0
*/
public class MySchedulerJob implements Job {
private SimpleDateFormat dateFormat() {
return new SimpleDateFormat("HH:mm:ss");
}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("AAAA: The time is now " + dateFormat().format(new Date()));
}
}
4.MySchedulerJob2package com.example.boot.quartz;
import com.example.boot.domain.IInventory;
import com.example.boot.service.InventoryService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @ClassName MySchedulerJob2
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:55
* @Version v.1.0.0
*/
@Component
public class MySchedulerJob2 implements Job {
@Autowired
InventoryService InventoryService;//这个service为spring管理的对象,service可自由编写
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
IInventory iInventory = InventoryService.selectPrimaryKey("2E5CB85354344F6B9B8BCAA3DF3818C8");
System.out.println("SchedulerJob2 event number: " + iInventory);
}
}5.MySchedulerListenerpackage com.example.boot.quartz;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
/**
* @ClassName MySchedulerListener
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:44
* @Version v.1.0.0
*/
@Component
public class MySchedulerListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
MyScheduler myScheduler;
@Autowired
MyJobFactory myJobFactory;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
myScheduler.schedulerJob();
System.out.println("SynchronizedData job start...");
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Bean(name ="mySchedulerFactoryBean")
public SchedulerFactoryBean mySchedulerFactory() {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
bean.setOverwriteExistingJobs(true);
bean.setStartupDelay(1);
bean.setJobFactory(myJobFactory);
return bean;
}
}
6.SpringUtilpackage com.example.boot.quartz;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @ClassName SpringUtil
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 17:00
* @Version v.1.0.0
*/
@Component
public class SpringUtil implements ApplicationContextAware {
private static final Logger logger = LoggerFactory.getLogger(SpringUtil.class);
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
logger.info("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getApplicationContext()获取applicationContext对象,applicationContext="
+ SpringUtil.applicationContext + "========");
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通过name获取 Bean.
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
return (T) getApplicationContext().getBean(name);
}
// 通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
// 通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}工程结构:
启动即可============>
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>spring-boot-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!--<exclusions> <exclusion> <groupId>org.springframework.quartz</groupId> <artifactId>spring-quartz-starter-logging</artifactId> </exclusion> </exclusions>--> </dependency> <!-- log4j --> <!--<dependency> <groupId>org.springframework.quartz</groupId> <artifactId>spring-quartz-starter-log4j2</artifactId> </dependency>--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.0</version> </dependency> <!-- alibaba的druid数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.0</version> </dependency> <!--热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!--true 不然不会生效--> <scope>true</scope> </dependency> <!-- Quartz 定时调度任务必要jar包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>opensymphony</groupId> <artifactId>quartz-all</artifactId> <version>1.6.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 没有该配置,devtools 不生效 --> <fork>true</fork> </configuration> <dependencies> <!-- spring热部署--> <!-- https://mvnrepository.com/artifact/org.springframework/springloaded --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.8.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
第二部:搭建好自己的Spring Boot项目
1.MyJobFactory
package com.example.boot.quartz;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
/**
* @ClassName MyJobFactory
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:46
* @Version v.1.0.0
*/
@Component
public class MyJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
// 调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
// 进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
2.MySchedulerpackage com.example.boot.quartz;
import org.quartz.*;
import org.quartz.impl.StdScheduler;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* @ClassName MyScheduler
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:58
* @Version v.1.0.0
*/
@Component
public class MyScheduler {
public void schedulerJob() throws SchedulerException {
ApplicationContext annotationContext = SpringUtil.getApplicationContext();
Scheduler myScheduler = (StdScheduler) annotationContext.getBean("mySchedulerFactoryBean");
startScheduler1(myScheduler);
startScheduler2(myScheduler);
myScheduler.start();
}
private void startScheduler1(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(MySchedulerJob.class).withIdentity("job1", "jobGroup1").build();
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("5 * * * * ?");
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
}
private void startScheduler2(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(MySchedulerJob2.class).withIdentity("job2", "jobGroup2").build();
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("5 * * * * ?");
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "triggerGroup2")
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
}
}
3.MySchedulerJobpackage com.example.boot.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @ClassName MySchedulerJob
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:54
* @Version v.1.0.0
*/
public class MySchedulerJob implements Job {
private SimpleDateFormat dateFormat() {
return new SimpleDateFormat("HH:mm:ss");
}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("AAAA: The time is now " + dateFormat().format(new Date()));
}
}
4.MySchedulerJob2package com.example.boot.quartz;
import com.example.boot.domain.IInventory;
import com.example.boot.service.InventoryService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @ClassName MySchedulerJob2
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:55
* @Version v.1.0.0
*/
@Component
public class MySchedulerJob2 implements Job {
@Autowired
InventoryService InventoryService;//这个service为spring管理的对象,service可自由编写
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
IInventory iInventory = InventoryService.selectPrimaryKey("2E5CB85354344F6B9B8BCAA3DF3818C8");
System.out.println("SchedulerJob2 event number: " + iInventory);
}
}5.MySchedulerListenerpackage com.example.boot.quartz;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
/**
* @ClassName MySchedulerListener
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 16:44
* @Version v.1.0.0
*/
@Component
public class MySchedulerListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
MyScheduler myScheduler;
@Autowired
MyJobFactory myJobFactory;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
myScheduler.schedulerJob();
System.out.println("SynchronizedData job start...");
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Bean(name ="mySchedulerFactoryBean")
public SchedulerFactoryBean mySchedulerFactory() {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
bean.setOverwriteExistingJobs(true);
bean.setStartupDelay(1);
bean.setJobFactory(myJobFactory);
return bean;
}
}
6.SpringUtilpackage com.example.boot.quartz;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @ClassName SpringUtil
* @Description That's the purpose of the class
* @Author yin.zhh
* @Date 2018-03-19 17:00
* @Version v.1.0.0
*/
@Component
public class SpringUtil implements ApplicationContextAware {
private static final Logger logger = LoggerFactory.getLogger(SpringUtil.class);
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
logger.info("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getApplicationContext()获取applicationContext对象,applicationContext="
+ SpringUtil.applicationContext + "========");
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通过name获取 Bean.
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
return (T) getApplicationContext().getBean(name);
}
// 通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
// 通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}工程结构:
启动即可============>
相关文章推荐
- SpringBoot整合Quartz定时任务 系统job Spring Boot教程 调度任务
- Spring与Quartz的整合实现定时任务调度
- springboot整合Quartz实现动态配置定时任务
- spring boot整合quartz实现多个定时任务
- Spring与Quartz的整合实现定时任务调度
- SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法
- Spring与Quartz的整合实现定时任务调度
- Spring与Quartz的整合实现定时任务调度
- Java作业调度/定时任务 Spring和Quartz整合
- springboot整合quartz实现定时任务
- Spring与Quartz的整合实现定时任务调度
- Spring与Quartz的整合实现定时任务调度
- Spring与Quartz的整合实现定时任务调度 以及crontab的用法
- 定时任务quartz与spring整合(springboot)
- SpringBoot整合Quartz定时任务 的简单实例 2
- springboot整合Quartz实现动态配置定时任务
- Spring与Quartz的整合实现定时任务调度
- Spring与Quartz的整合实现定时任务调度
- Spring整合Quartz实现定时任务调度的方法
- springboot动态配置定时任务2种方式,整合Quartz多线程并发执行多个定时任务配置