类存储job信息

public class JobInfo {//省略setter getter
String jobName;
String jobGroup;
Class<? extends Job> jobClass;
JobDataMap dataMap;
public JobInfo() {}
public JobInfo(String jobName, String jobGroup, Class<? extends Job> jobClass, JobDataMap dataMap) {
this.jobName = jobName;
this.jobGroup = jobGroup;
this.jobClass = jobClass;
this.dataMap = dataMap;
}
}

实现类,继承Job接口

public class HelloJob implements Job {
private static final Logger logger = Logger.getLogger(HelloJob.class);
public HelloJob() {}
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
logger.error("*****************job start*****************");
JobKey jobKey = jobExecutionContext.getJobDetail().getKey();
// JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
JobDataMap dataMap = jobExecutionContext.getMergedJobDataMap();
String name = dataMap.getString("name");
logger.info("*****************good job*****************");
logger.info("*****************" + jobKey + "--" + name + "*****************");
logger.error("*****************job end*****************");
}
}

测试,三种任务(Once、Repeat、Cron)

public class QuartzTest {
public static void main(String[] args) {
JobInfo jobInfo = new JobInfo();
jobInfo.setJobClass(HelloJob.class);
jobInfo.setJobName("myJob");
jobInfo.setJobGroup("myGroup");
Map map = new HashMap();
map.put("name", "wxy");
JobDataMap jobDataMap = new JobDataMap(map);
jobInfo.setDataMap(jobDataMap);
try {
// Grab the Scheduler instance from the Factory
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// and start it off
scheduler.start(); JobDetail job = createJob(jobInfo);
// Trigger trigger = createSimpleOrRepeatTrigger(jobInfo);
String cron = "0/10 * * * * ? ";
Trigger trigger = createCronTrigger(jobInfo, cron); scheduler.scheduleJob(job, trigger); TimeUnit.MILLISECONDS.sleep(10 * 60 * 1000);
scheduler.shutdown(); } catch (SchedulerException se) {
se.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
} private static JobDetail createJob(JobInfo jobInfo) {
JobDetail job = newJob(jobInfo.getJobClass()).withIdentity(jobInfo.getJobName(), jobInfo.getJobGroup())
.usingJobData(jobInfo.getDataMap())
.build();
return job;
} private static Trigger createSimpleOrRepeatTrigger(JobInfo jobInfo) {
Trigger trigger = newTrigger().withIdentity(jobInfo.getJobName() + "_trg", jobInfo.getJobGroup())
.startNow()
// .startAt(futureDate(5, DateBuilder.IntervalUnit.MINUTE))
// .startAt(dateOf(10, 37, 0))
// .endAt(dateOf(11, 0, 0))
.withSchedule(
simpleSchedule()
.withRepeatCount(1)
.withIntervalInSeconds(10)
// .repeatForever()
)
.build();
return trigger;
} private static Trigger createCronTrigger(JobInfo jobInfo, String cron) {
Trigger trigger = newTrigger().withIdentity(jobInfo.getJobName() + "_trg", jobInfo.getJobGroup())
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule(cron).inTimeZone(TimeZone.getDefault())
)
.build();
return trigger;
} }

  

springboot使用定时器,定时器数据存在表中

@Configuration
public class CompleteScheduleConfig implements SchedulingConfigurer {
@Autowired
CronMapper cronMapper; @Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(
() -> System.out.println("执行定时任务2: " + LocalDateTime.now().toLocalTime()),
triggerContext -> {
String cron = cronMapper.getCron();
if (StringUtils.isEmpty(cron)) {
// Omitted Code ..
}
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
} @Mapper
public interface CronMapper {
@Select("select cron from cron limit 1")
String getCron();
}
}

表中数据如下:

cron_id   cron
1 0/10 * * * * ?

quartz 定时器执行的更多相关文章

  1. 学习笔记--Quartz定时器

    文章同步发表在博主网站朗度云,传输门:http://www.wolfbe.com/detail/201608/338.html 1.Quartz定时器执行流程 Quartz需要定义执行任务.触发器,在 ...

  2. Spring的quartz定时器同一时刻重复执行二次的问题解决

    最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...

  3. Spring的quartz定时器重复执行二次的问题解决

    Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...

  4. java定时器,Spring定时器和Quartz定时器

    一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...

  5. java Quartz定时器任务与Spring task定时的几种实现,

    java Quartz定时器任务与Spring task定时的几种实现 基于java 的定时任务实现, Quartz 时间详细配置    请查阅   http://www.cnblogs.com/si ...

  6. 实现quartz定时器及quartz定时器原理介绍(转)

    一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...

  7. 关于Spring的Quartz定时器设定

    在实际的开发业务中经常会遇到定时执行某个任务,如果项目使用的ssh框架的话,就需要配合spring来使用定时器.spring的定时器是一个固定的配置格式,具体的applicationContext配置 ...

  8. Quartz定时器中Cron时间控制表达式写法

    Quartz定时器中Cron时间控制表达式写法:   1.表示形式 该表达式简洁简单,总共有7个空格分割的表达子式,形式为[* * * * * * *],而这七个位置上的东西表达方式有很多,意义从左往 ...

  9. 动态添加定时任务-quartz定时器

    Quartz动态添加.修改和删除定时任务 在项目中有一个需求,需要灵活配置调度任务时间,刚开始用的Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务 ...

随机推荐

  1. mysql 根据日期时间查询数据

    mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...

  2. 【POJ2488】A Knight's Journey

    题目传送门 本题知识点:深度优先搜索 + 回溯 + 剪枝 + 字典序 题意是给你一个由 p,q 组成一个矩形的棋盘,让你用马棋在这上面走,是否能一线走完这 p * q 个格子. 关于这条路线是怎么走的 ...

  3. [内网渗透]Windows中的用户帐户与组账户

    0x01 用户帐户 1.1 简介        用户帐户是对计算机用户身份的标识,本地用户帐户.密码存在本地计算机上,只对本机有效,存储在本地安全帐户数据库 SAM 中.        文件路径:C: ...

  4. N以内的素数计算(Java代码)

    列出小于N的所有素数 普通计算方式, 校验每个数字 优化的几处: 判断是否整除时, 除数使用小于自身的平方根的素数 大于3的素数, 都在6的整数倍两侧, 即 6m - 1 和 6m + 1 publi ...

  5. Python中的args和kwargs

    有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你 ...

  6. (转)nginx 安全配置文档

    原文:https://www.cnblogs.com/heaven-xi/p/9961357.html#top 1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系 ...

  7. WebGL学习笔记(一):理解基本概念和渲染管线

    WebGL 是以 OpenGL ES 2.0 为基础的 3D 编程应用接口. 渲染管线(图形流水线) 渲染管线是指将数据从3D场景转换成2D图像,最终在屏幕上显示出来的总过程.它分为几个阶段:应用阶段 ...

  8. ES6新增函数总结和range函数实现

    Array.from  类数组,Set,字符串转为数组 Array.of   不定参数转为数组 Array.prototype.fill(value,[start],[end]) 对数组在指定范围填充 ...

  9. bat curl 定时请求

    @echo off :loop call:sleep 30 ::调用方法call:sleep [毫秒] (1秒=1000毫秒) curl https://stage.coolfen.com/suppl ...

  10. [译]如何根据Pandas中的列名获取列所在的index位置?

    原文来源:https://stackoverflow.com/questions/13021654/get-column-index-from-column-name-in-python-pandas ...