程序文件结构,如下图,后面详细列出各文件的代码:

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定时任务示例的更多相关文章

  1. SpringBoot整合Quartz定时任务 系统job Spring Boot教程 调度任务

    原文地址:https://www.cnblogs.com/allalongx/p/8477368.html 构建工程 创建一个Springboot工程,在它的程序入口加上@EnableScheduli ...

  2. springboot集成shiro集成mybatis-plus、redis、quartz定时任务

    完整项目代码位于码云上,点击获取:Git地址 主要介绍一下重点配置地方: 一.application.yml文件 server: port: 8084 servlet: context-path: / ...

  3. SpringBoot整合定时任务和异步任务处理 3节课

    1.SpringBoot定时任务schedule讲解   定时任务应用场景: 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类        ...

  4. quartz定时任务框架的使用

    quartz定时任务时间设置 这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                                 ...

  5. quartz定时任务时间配置

    quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记  这些星号由左到右按顺序代表 :     *    *     *    ...

  6. Quartz 定时任务时间设置

    转自https://blog.csdn.net/zdx1515888659/article/details/79158169 quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * ...

  7. quartz定时任务及时间设置

    quartz 定时任务时间设置1.这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                               ...

  8. quartz定时任务框架的使用以及原理

    quartz定时任务时间设置 这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                                 ...

  9. quartz定时任务时间表达式说明

    quartz定时任务时间表达式说明   这些星号由左到右按顺序代表 :    *    *     *     *    *     *   *     格式: [秒] [分] [小时] [日] [月 ...

随机推荐

  1. CodeForces 427B Prison Transfer (滑动窗口)

    题意:给定 n, t, c 和 n 个数,问你在这 n 个数中有多少连续的 c 个数,并且这个 c 个数不大于 t. 析:很简单么,是滑动窗口,从第一个开始遍历,如果找到 c 个数,那么让区间前端点加 ...

  2. 使用word 2007 发布csdn博客

    目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...

  3. HttpUploader2-queue版本

    1.1 2016版本 目标: 1.大幅度优化JS代码,面向开发人员更加友好,逻辑清晰,代码简洁,便于阅读,定制开发,扩展,更加符合企业级应用需求. 2.大幅度使用并发技术来提高上传速度,与HttpUp ...

  4. 理解Javascript的Prototype

    在Javascript中创建对象主要分为三种方式 1. var catA = {name: "Fluffy", color: "White", age: 0}; ...

  5. elasticsearch CriteriaQuery查询例子

    elasticsearch CriteriaQuery java API实例应用 CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteri ...

  6. python文件操作os模块

    Python 统计某一文件夹下文件数量 使用python  pathlib模块 from pathlib import Path dir_path = ' ' print(len(list(Path( ...

  7. .net EventHandler 事件处理

    通常定义事件 都是通过自定义委托的方式来实现, 今天使用EventHandler   委托来定义事件: public class NewMailEventArgs : EventArgs { priv ...

  8. Logiccode GSM SMS .Net Library 3.3

    下载 Mega 百度  密码:5pvb

  9. ZKEACMS 模板组件扩展

    前言 如果你还不知道ZKEACMS,不妨先了解一下. ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来 官方地址:http://www.zkea.net/zkeacms ...

  10. 虚拟机ping 不通主机,主机可ping 虚拟机解决方法

    在VMware虚拟机里安装了CentOS的系统发现桥接模式Ping不通外网,Ping主机也ping 不通,但是主机可以ping 虚拟机. 百度了以下,原因是w10防火墙搞的鬼,解决办法有两种: 1.关 ...