SpringBoot + Quartz定时任务示例
程序文件结构,如下图,后面详细列出各文件的代码:

1. maven的pom.xml文件如下:
<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>syb</groupId>
<artifactId>quartzTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>quartzTest</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 启动类,注意添加了一个Listener,用于在Spring初始化完成后,执行一段我们自定义的逻辑。代码如下:
package syb.quartzTest; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(App.class);
// 添加了一个listener,用于在spring初始化完成后,执行一段我们自定义的逻辑
springApplication.addListeners(new StartupListener());
springApplication.run(args);
}
}
3. StartupListener.java,在Spring初始化完成后,添加了一个定时任务:
package syb.quartzTest; import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent; public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {
private Logger logger = LoggerFactory.getLogger(getClass()); /**
* 初始化方法,添加了一个定时任务
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
ApplicationContext ctx = event.getApplicationContext(); // 添加一个定时任务
QuartzUtil qu = ctx.getBean(QuartzUtil.class);
JobKey jobKey = new JobKey("testJob");
JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
qu.addJob(jobDetail, trigger);
} catch (Exception e) {
logger.error("", e);
}
}
}
4. QuartzUtil.java,定义了添加、删除定时任务的公用方法。
package syb.quartzTest; import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* Quartz定时任务工具类,包含添加定时任务、删除定时任务的操作。
*/
@Service
public class QuartzUtil {
private Logger logger = LoggerFactory.getLogger(getClass()); /**
* 注入springboot自动配置的调度器
*/
@Autowired
private Scheduler scheduler; /**
* 添加定时任务
* @param job
* @param trigger
*/
public void addJob(JobDetail job, Trigger trigger) {
try {
if (scheduler.checkExists(job.getKey())) {
scheduler.deleteJob(job.getKey());
}
scheduler.scheduleJob(job, trigger);
logger.info("add job: " + job.getKey());
} catch (Exception e) {
logger.error("", e);
}
} /**
* 删除定时任务
* @param jobName
*/
public void deleteJob(String jobName) {
try {
JobKey jobKey = new JobKey(jobName);
if (scheduler.checkExists(jobKey)) {
scheduler.deleteJob(jobKey);
}
} catch (Exception e) {
logger.error("", e);
}
}
}
5. TestJob.java,一个供测试用的任务类。代码如下:
package syb.quartzTest; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 定时任务类,这里定义了一个定时任务
*/
public class TestJob implements Job {
private Logger logger = LoggerFactory.getLogger(getClass()); @Override
public void execute(JobExecutionContext ctx) throws JobExecutionException {
logger.info("*********************executing TestJob*********************");
} }
6. 配置文件application.properties,定义了一个数据源,并指定quartz存储任务的方式为使用数据库。如果不希望将定时任务的信息保存到数据库,则去掉spring.quartz.job-store-type=jdbc即可。
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_database
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.hikari.minimum-idle=2
spring.datasource.hikari.maximum-pool-size=10 spring.quartz.job-store-type=jdbc
注意,如果要将quartz定时任务存储到数据库,需要在数据库中建表,具体建表语句,自己找,哇哈哈哈。。。
SpringBoot + Quartz定时任务示例的更多相关文章
- SpringBoot整合Quartz定时任务 系统job Spring Boot教程 调度任务
原文地址:https://www.cnblogs.com/allalongx/p/8477368.html 构建工程 创建一个Springboot工程,在它的程序入口加上@EnableScheduli ...
- springboot集成shiro集成mybatis-plus、redis、quartz定时任务
完整项目代码位于码云上,点击获取:Git地址 主要介绍一下重点配置地方: 一.application.yml文件 server: port: 8084 servlet: context-path: / ...
- SpringBoot整合定时任务和异步任务处理 3节课
1.SpringBoot定时任务schedule讲解 定时任务应用场景: 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类 ...
- quartz定时任务框架的使用
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
- quartz定时任务时间配置
quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记 这些星号由左到右按顺序代表 : * * * ...
- Quartz 定时任务时间设置
转自https://blog.csdn.net/zdx1515888659/article/details/79158169 quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * ...
- quartz定时任务及时间设置
quartz 定时任务时间设置1.这些星号由左到右按顺序代表 : * * * * * * * ...
- quartz定时任务框架的使用以及原理
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
- quartz定时任务时间表达式说明
quartz定时任务时间表达式说明 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月 ...
随机推荐
- C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享
下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...
- 关于解决百度sitemap1.0一直提示校验中问题
实际原因是php设置问题,各个版本对应的设置有些不一样. php版本改成就好了. 修复方法:在插件里找到插件:\baidusubmit\inc.找到sitemap.php,查找curl_setopt( ...
- 用阿里巴巴官方给Jmeter开发的Dubbo sampler取样器进行dubbo接口测试【图解剖析】
自:https://blog.csdn.net/cyjs1988/article/details/84258046 [一]Dubbo sampler下载地址: 该插件支持jmeter 3.2及3.2以 ...
- ZOJ3705:Applications
Recently, the ACM/ICPC team of Marjar University decided to choose some new members from freshmen to ...
- myeclipse设置默认的jsp打开方式
- Transaction And Lock--两种方式实现可重复读
一些需求要求两次查询数据之间不允许数据被修改,即可重复读取 可重复读REPEATABLE READ与串行化SERIALIZABLE的区别在于串行化要求满足该查询的数据不被修改且无新满足该查询条件的数据 ...
- CentOS7 关闭防火墙[转]
CentOS6关闭防火墙使用以下命令, /临时关闭 service iptables stop //禁止开机启动 chkconfig iptables off CentOS7中若使用同样的命令会报错, ...
- c#设计模式系类:亨元模式
一.引言 在软件开发过程中,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次去申请内存空间了,这样可能出现内存使用越来越多的情况,这样的问题是非常 ...
- .net core session cookie操作
配置Session Cookie注意
- 转载:各种SQRT大比拼
很有趣的文章: http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi