首页 > 其他分享 >spring boot中使用quartz

spring boot中使用quartz

时间:2023-09-10 23:01:09浏览次数:39  
标签:quartz String spring void boot import org jobInfo public

spring boot项目中pom.xml如下:

<?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>
    <!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。-->
    <!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,
             其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.demo</groupId>
    <artifactId>spring-boot-quartz</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--quartz 定时任务-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

    </dependencies>

</project>

JobInfo类,job的相关信息

package org.demo.dto;

import org.quartz.Job;

public class JobInfo {
    /**
     * 任务名称
     */
    private String jobName;
    /**
     * 任务组
     */
    private String jobGroup;
    /**
     * 触发器名称
     */
    private String triggerName;
    /**
     * 触发器组
     */
    private String triggerGroup;
    /**
     * cron表达式
     */
    private String cron;
    /**
     * 类名
     */
    private String className;
    /**
     * 状态
     */
    private String status;
    /**
     * 下一次执行时间
     */
    private String nextTime;
    /**
     * 上一次执行时间
     */
    private String prevTime;
    /**
     * 配置信息(data)
     */
    private String config;

    private Class<? extends Job> clazz;

    public String getJobName() {
        return jobName;
    }

    public void setJobName(String jobName) {
        this.jobName = jobName;
    }

    public String getJobGroup() {
        return jobGroup;
    }

    public void setJobGroup(String jobGroup) {
        this.jobGroup = jobGroup;
    }

    public String getTriggerName() {
        return triggerName;
    }

    public void setTriggerName(String triggerName) {
        this.triggerName = triggerName;
    }

    public String getTriggerGroup() {
        return triggerGroup;
    }

    public void setTriggerGroup(String triggerGroup) {
        this.triggerGroup = triggerGroup;
    }

    public String getCron() {
        return cron;
    }

    public void setCron(String cron) {
        this.cron = cron;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getNextTime() {
        return nextTime;
    }

    public void setNextTime(String nextTime) {
        this.nextTime = nextTime;
    }

    public String getPrevTime() {
        return prevTime;
    }

    public void setPrevTime(String prevTime) {
        this.prevTime = prevTime;
    }

    public String getConfig() {
        return config;
    }

    public void setConfig(String config) {
        this.config = config;
    }

    public Class<? extends Job> getClazz() {
        return clazz;
    }

    public void setClazz(Class<? extends Job> clazz) {
        this.clazz = clazz;
    }
}

QuartzConfig类

package org.demo.config;

import org.demo.MyJob;
import org.demo.dto.JobInfo;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class QuartzConfig {

    @Autowired
    Scheduler scheduler;

    @PostConstruct
    public void configJob(){
        JobInfo jobInfo = new JobInfo();
        jobInfo.setJobName("my job1");
        jobInfo.setJobGroup("my job1 group");
        jobInfo.setTriggerGroup("my job1 trigger group");
        jobInfo.setClazz(MyJob.class);
        jobInfo.setTriggerName("my job1 trigger name");
        jobInfo.setCron("0/5 * * * * ?");

        JobKey jobKey = JobKey.jobKey(jobInfo.getJobName(), jobInfo.getJobGroup());

        JobDetail jobDetail = JobBuilder.newJob(jobInfo.getClazz())
                .withIdentity(jobKey)
                .withIdentity(jobInfo.getJobName(), jobInfo.getJobGroup())
                .storeDurably().build();
        TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getTriggerName(), jobInfo.getTriggerGroup());
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity(triggerKey)
                .withSchedule(CronScheduleBuilder.cronSchedule(jobInfo.getCron()).withMisfireHandlingInstructionDoNothing())
                .build();
        try {
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

MyJob类,具体的job

package org.demo;

import org.demo.service.MyQuartzService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MyJob extends QuartzJobBean {

    @Autowired
    MyQuartzService myQuartzService;
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + " quartz job running ...");
        myQuartzService.test();
    }
}

MyQuartzService类

package org.demo.service;

import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Service
public class MyQuartzService {

    public void test(){
        System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + " myQuartzService running ...");
    }
}

yml配置

server:
  port: 8080
spring:
  datasource:
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    username: system
    password: 123456
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  quartz:
    auto-startup: true
    job-store-type: jdbc
    jdbc:
      initialize-schema: always

标签:quartz,String,spring,void,boot,import,org,jobInfo,public
From: https://www.cnblogs.com/mmcode/p/17692225.html

相关文章

  • Spring 中 Bean 的生命周期
    在您的应用程序中,由SpringIoC容器管理的形成其核心的对象被称为"bean"。一个bean是由SpringIoC容器实例化、组装和管理的对象。这些bean是通过您提供给容器的配置元数据创建的,例如,在前面章节中已经看到的XML<bean/>定义。Bean定义包含了所谓的配置元数据,容器需要了解以下内容......
  • Spring源码分析(八)容器的扩展点(BeanPostProcessor)
    在前面两篇关于容器扩展的文章,我们已经完成了对BeanFactoryPostProcessor和FactoryBean的分析,对于BeanFactoryPostProcessor而言,它能让我们对容器中扫描出来的BeanDefinition做出修改以达到扩展的目的,而对于FactoryBean而言,它提供了一种特殊创建bean的手段,能让我们将一......
  • Spring Boot中的依赖管理及自动配置
    你真的理解SpringBoot项目中的parent吗?-SpringBoot2教程合集(javaboy.org)【SpringBoot】SpringBoot项目中的依赖管理及自动配置(qq.com)创建一个SpringBoot项目有三种方式,如在线创建、使用IDEA开发工具创建、使用Maven创建,这三种创建方式,无论是哪一种,创建成功后,pom.......
  • SpringBoot 如何实现文件上传和下载
    当今Web应用程序通常需要支持文件上传和下载功能,SpringBoot提供了简单且易于使用的方式来实现这些功能。在本篇文章中,我们将介绍SpringBoot如何实现文件上传和下载,同时提供相应的代码示例。 文件上传SpringBoot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种......
  • BOOT跳转APP,STM32F4正常,但是GD32F4起不来的问题
    问题描述: stm32F4可以正常从BOOT跳转执行APP,到了GD32F4,卡死在APP程序的这里。   临时解决办法:APP程序内 把这两句代码都屏蔽掉就好了。 相关资料搜索:  最佳解决方案:在APP里面,先rcc_deinit一下,如下所示。    .......
  • 3.SpringCloud理解
    SpringCloud是一个用于构建分布式系统的开发工具集合,它基于SpringBoot提供了一套简化的微服务架构开发组件。SpringCloud提供了多个模块,包括服务注册与发现、配置管理、负载均衡、断路器、网关等,这些模块可以帮助开发者快速构建和部署分布式系统。服务注册与发现:通过使......
  • 实现读写分离SpringBoot+MyBatis+Druid
    实现读写分离SpringBoot+MyBatis+Druid1.读写分离概念理解读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程......
  • QuartzNet在blazor-winform的使用
    通过构造函数获取ISchedulerFactoryprivateasyncvoidInitJob(){var_scheduler=await_schedulerFactory.GetScheduler();_scheduler.JobFactory=newQuartzJobFactory(_serviceProvider);;//awaitfactory.GetScheduler();IJobDetailjob=......
  • 在springboot项目种引入element组件
    1、保证vue的版本在3以上2、Win+R--打开命令行窗口(cmd)输入下面的命令,打开图形化界面:vueui3、打开我们创建的vue项目选择路径即可自主导入项目;4、安装element-ui的插件依赖5、查看项目中是否存在ok!......
  • 使用Java和Spring构建RESTful API
    Spring框架简介Spring是一个开源的Java应用程序框架,广泛用于构建企业级应用程序和RESTfulAPI。它提供了丰富的功能集,包括依赖注入、AOP(面向切面编程)、事务管理、Web开发和安全性等。以下是一些关键Spring模块:SpringCore:提供了核心功能,包括依赖注入和Bean管理。SpringBoot:简化了......