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

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. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'supplierAction': Injection of resource dependencies failed; nested exception is org.springframework.beans.factor

    这个错误是因为抽象Action类的时候,把ServletContext写成了serverContext,导致无法注入,正确写法是 import javax.annotation.Resource; i ...

  2. 使用jQuery 取文本

    <html> <head> <meta charset="UTF-8"> <title>b</title> <sc ...

  3. [Lua快速了解一下]Lua的函数

    -recurrsive function fib(n) end ) + fib(n - ) end -closure 示例一 function newCounter() return function ...

  4. 从Entity Framework的实现方式来看DDD中的repository仓储模式运用

    一:最普通的数据库操作 static void Main(string[] args) { using (SchoolDBEntities db = new SchoolDBEntities()) { ...

  5. Transaction And Lock--存储过程中使用事务的模板

    某公司内部使用的模板 create procedure [usp_my_procedure_name] as begin set nocount on; declare @trancount int; ...

  6. 慎用uniapp开发商业级应用

    官方的社区反馈问题只给解决简单的前端问题,涉及到IDE的问题长期没人回复没人认领 官方公布的各渠道联系方式都得不到回复,先后出现了两个无法解决的问题 第一个问题(现在你都可以去他们社区搜索,没人回复没 ...

  7. C#读取Excel的数据,并且以混合模式读取,防止数据类型变更

    /// <summary> /// Read Excel to DataSet /// </summary> /// <param name="filename ...

  8. [Perl]通过GD模块获取字符/汉字的点阵

    原来Perl获取汉字的点阵如此简单 示例脚本应保存为utf8格式 Code: [全选] [展开/收缩] [Download] (Untitled.pl) use GD; use utf8; my $g ...

  9. 多线程DP

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  10. [ActionScript 3.0] 像素级碰撞检测

    package { import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Disp ...