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定时任务时间表达式说明 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月 ...
随机推荐
- 使用word 2007 发布csdn博客
目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...
- (自己转)比较ArrayList、LinkedList、Vector
1. List概述 List,就如图名字所示一样,是元素的有序列表.当我们讨论List时,将其与Set作对比是一个很好的办法,Set集合中的元素是无序且唯一的.下图是Collection的类继承图,从 ...
- spring mvc注解@RequestMapping
1.url路径映射 基本功能 2.窄化请求映射 根路径+子路径 注意setViewName的路径. 3.限制http请求方法 get和 post 如果是get
- WCF 学习笔记
Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点.服务终结点 ...
- iOS设计模式之单例
单例模式的意思就是这个类只有一个实例,这个类就是单例类.在iOS中有不少都是单例NSNull,NSFileManager ,UIApplication,NSUserDefaults ,UIDevice ...
- getTextContent()方法会出现The method getTextContent() is undefined for the type Node 提示
eclipse 中 如果加入了 其他了xfire 等其他xml解析包的话,使用org.w3c.dom.Node下的getTextContent()方法会出现The method getTextCont ...
- static 静态类
C# 编译器对静态类进行了如下限制. 1. 静态类必须直接从System.Object派生,从其他任何基类生都没有意义,继承只适用于对象,而你不能创建静态类的实例. 2. 静态类不能实现任何接口,这是 ...
- Android-Observer(内容观察者)
内容提供者应用暴露的数据,是被多个其他应用访问(insert,update,delete,query),但如果L应用要查询(内容提供者应用暴露的数据),难道要开启子线程一直循环去查询 ? 答:开启子线 ...
- 基于JSP+Servlet开发高校社团管理系统(前台+后台) 源码
基于JSP+Servlet开发高校社团管理系统(前台+后台): 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MYSQL数据库 运行效果 ...
- button的onclick函数一直刷新
button中的onclick写成函数时需要 <button onclick="return function();"></button> 加一个retur ...