前面第二种RAM方法已经可以满足单机使用需求了,但是本地调试和服务器应用会有冲突,因此将定时任务保存到本地json配置文件中,这样更灵活。

1、ApplicationInit类

package org.jeecg.modules.quartz.init;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.quartz.entity.SysQuartzramJob;
import org.jeecg.modules.quartz.enums.JobStatus;
import org.jeecg.modules.quartz.service.ISysQuartzramJobService;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component; import java.io.IOException;
import java.io.InputStream;
import java.util.List; @Component
@Slf4j
public class ApplicationInit implements CommandLineRunner { private static final String TRIGGER_IDENTITY = "trigger";
@Autowired
private ISysQuartzramJobService sysQuartzramJobService;
@Autowired
private Scheduler scheduler; @Override
public void run(String... args) throws Exception { log.info(String.format("程序启动,定时任务开始加载,时间:" + DateUtils.getTimestamp())); //从json配置文件加载定时任务列表
loadJobFromFile();
} //这是从数据库表读取定时任务的逻辑
private void loadJobFromDB() throws Exception {
try { QueryWrapper<SysQuartzramJob> queryWrapper = new QueryWrapper<SysQuartzramJob>();
List<SysQuartzramJob> list=sysQuartzramJobService.list(queryWrapper);
for(SysQuartzramJob job : list)
{
schedulerJob(job);
if (JobStatus.PAUSED.getStatus().equals(job.getTriggerState())) {
scheduler.pauseJob(new JobKey(job.getJobName(), job.getJobGroup()));
}
} }
catch (Exception e)
{
log.error(e.getMessage(),e);
}
} //这是从json配置文件读取定时任务的逻辑
private void loadJobFromFile() throws Exception {
try {
String jsonSrc="classpath:org/jeecg/modules/quartz/init/quartz.json";
InputStream stream = getClass().getClassLoader().getResourceAsStream(jsonSrc.replace("classpath:", ""));
String jsonStr = IOUtils.toString(stream,"utf-8");
log.info("定时器:"+jsonStr); List<SysQuartzramJob> list = JSON.parseArray(jsonStr, SysQuartzramJob.class);
for (SysQuartzramJob job : list)
{
schedulerJob(job);
if (JobStatus.PAUSED.getStatus().equals(job.getTriggerState())) {
scheduler.pauseJob(new JobKey(job.getJobName(), job.getJobGroup()));
}
} } catch (IOException e) {
log.error(e.getMessage(),e);
}
} public void schedulerJob(SysQuartzramJob job) throws Exception {
//构建job信息
Class cls = Class.forName(job.getJobClassName()) ;
// cls.newInstance(); // 检验类是否存在
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(job.getJobName(),job.getJobGroup())
.withDescription(job.getDescription()).build(); // 触发时间点
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression().trim());
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(TRIGGER_IDENTITY + job.getJobName(), job.getJobGroup())
.startNow().withSchedule(cronScheduleBuilder).build();
//交由Scheduler安排触发
scheduler.scheduleJob(jobDetail, trigger);
}
}

2、json配置文件

[
{
"id": "1",
"jobName": "RiverSiteWarnJob",
"jobGroup": "river",
"jobClassName": "org.jeecg.modules.quartz.job.RiverSiteWarnJob",
"cronExpression": "6 0/10 * * * ?",
"triggerState": "RUNNING",
"description": "站点超标报警,10分钟执行1次"
}
]

3、yml配置

quartz:
properties:
org:
quartz:
scheduler:
instanceName: quartzScheduler
instanceId: AUTO
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true

4、job定时任务

package org.jeecg.modules.quartz.job;

import org.jeecg.common.util.DateUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import lombok.extern.slf4j.Slf4j; /**
* 示例不带参定时任务
*
* @Author Scott
*/
@Slf4j
public class SampleJob implements Job { @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info(String.format(" Jeecg-Boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp()));
}
}

spring-boot集成Quartz-job存储方式二RAM,改从json配置文件读取job配置的更多相关文章

  1. spring boot集成pagehelper(两种方式)

    当spring boot集成好mybatis时候需要进行分页,我们首先添加maven支持 <dependency> <groupId>com.github.pagehelper ...

  2. Spring Boot集成quartz实现定时任务并支持切换任务数据源

    org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足 ...

  3. spring boot 集成 quartz 定时任务

    spring boot: @EnableScheduling开启计划任务支持,@Scheduled计划任务声明 1.pom.xml 引入依赖 <dependency> <groupI ...

  4. Spring Boot集成Quartz注入Spring管理的类

    摘要: 在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入. Spring有自己的Schedule定时任务,在S ...

  5. Spring boot 集成三种定时任务方式

    三种定时任务方式分别为 org.springframework.scheduling.annotation.Scheduled java.util.concurrent.ScheduledExecut ...

  6. Spring boot 集成三种拦截方式

    三种拦截方式分别为: javax.servlet.Filter org.springframework.web.servlet.HandlerInterceptor org.aspectj.lang. ...

  7. Quartz与Spring Boot集成使用

    上次自己搭建Quartz已经是几年前的事了,这次项目中需要定时任务,需要支持集群部署,想到比较轻量级的定时任务框架就是Quartz,于是来一波. 版本说明 通过搜索引擎很容易找到其官网,来到Docum ...

  8. Spring Boot集成持久化Quartz定时任务管理和界面展示

    本文是对之前的一篇文章Spring+SpringMVC+mybatis+Quartz整合代码部分做的一个修改和补充, 其中最大的变化就是后台框架变成了Spring Boot. 本工程所用到的技术或工具 ...

  9. Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件

    上一篇文章,写了如何搭建一个简单的Spring boot项目,本篇是接着上一篇文章写得:Spring boot入门:快速搭建Spring boot项目(一),主要是spring boot集成mybat ...

  10. Spring Boot集成MyBatis的2种方式

    目录 写在前面 准备工作 配置数据库驱动 配置数据源 原生集成MyBatis 依赖配置 注册MyBatis核心组件 定义并使用映射器 通过MyBatis-Spring-Boot-Starter集成 默 ...

随机推荐

  1. #FFT#P4173 残缺的字符串

    题目 有一个长度为 \(m\) 的字符串 \(A\) 和 一个长度为 \(n\) 的字符串 \(B\), 它们有若干位置为通配符,现在问 \(B\) 的每一个后缀是否存在前缀为 \(A\). 分析 考 ...

  2. #拓扑排序#洛谷 4645 [COCI2006-2007 Contest#3] BICIKLI

    题目 这个地方有 \(n\) 个城镇,从 \(1\sim n\) 编号, 其中有 \(m\) 条单向道路连接它们. 比赛将在 \(1\) 号城镇开始并在 \(2\) 号城镇结束. 主办方想知道,一共有 ...

  3. OpenAtom OpenHarmony分论坛圆满举办,生态与产业发展迈向新征程

    7月27日,2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛在北京成功举办.本次论坛以"万物互联,使能千行百业"为主题,OpenHarmony共建单位.生 ...

  4. 基于新版宝塔Docker部署在线客服系统过程小记

    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 客服系统开发过程中,最让我意外的是对 TCP/IP 协议的认识.过去一直认 ...

  5. 为什么 L1 正则化能做特征选择而 L2 正则化不能

    假设我们的模型只有一个参数 \(w\),损失函数为 \(L(w)\),加入 L1 和 L2 正则化后的损失函数分别记为 \(J_1(w), J_2(w)\): \[\begin{gathered} J ...

  6. C#中操作Excel

    在GIS数据处理中,经常遇到与Excel的交互,这里进行简单的总结. Excel行列号就像是编辑中的二维数据组,操作Excel相当于操作二维数组.遍历.循环.取值.赋值-- 1.添加引用 添加引用也有 ...

  7. 挑战吧,HarmonyOS应用开发工程师

      一年一度属于工程师的专属节日1024已过,但程序员多重活动持续进行中~ 参与活动即有机会获得HUAWEI Freebuds 5i 耳机等精美礼品! 点击"阅读原文"查看更多活动 ...

  8. 开发指导—利用组件&插值器动画实现HarmonyOS动效

    一. 组件动画 在组件上创建和运行动画的快捷方式.具体用法请参考通用方法. 获取动画对象 通过调用animate方法获得animation对象,animation对象支持动画属性.动画方法和动画事件. ...

  9. nginx重新整理——————http 模块中的请求过程[十一]

    前言 简单介绍一下http的一些指令. 正文 一般http的嵌套规则是这样的: http{ upstream{} split_clients {} map{} gep{} server{ if(){} ...

  10. jenkins 持续集成和交付——安装与账户安全还有凭证(二)

    前言 jenkins 整理完毕,共二十四章,逐步放出,互相交流学习.学会jenkins 只是第一步,真正的还是多写脚本,然后遇到构建过程的坑,然后解决. 正文 安装jenkins 首先是如何安装jen ...