类存储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. 关于html异步加载外部json文件报错问题

    一. HTML代码如下: 参考网站(echarts-JSON请求数据):https://blog.csdn.net/you23hai45/article/details/51585506 <!D ...

  2. TensorFlow之卷积函数(conv2d)

    卷积函数是卷积神经网络(CNN)非常核心和重要的函数,在搭建CNN时经常会用到,因此较为详细和深入的理解卷积函数具有十分重要的意义. tf.nn.conv2d(input, filter, strid ...

  3. SVM 输出分类概率(python)

    import numpy as np from sklearn import svm X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]]) y = np ...

  4. phpstudy5.6 No input file specified的解决方法

    一.问题描述 5.6就提示这个错误,切换5.5就可以 二.原因分析 原因1:提示:“No input file specified.”原因在于使用的PHP5.6是fast_cgi模式,而在某些情况下, ...

  5. Mysql创建测试大量测试数据

    修改mysql配置 max_heap_table_size=4000M innodb_flush_log_at_trx_commit=0sync_binlog=500 创建测试数据库 create d ...

  6. Java基础 三目运算符 用if-else对其进行解释

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  7. 将map对象参数转换成String=String&方式

    * 将map对象参数转换成String=String&方式 * @param params * @param charset * @return * @throws UnsupportedEn ...

  8. 自定义Func方法支持out,ref参数

    默认的Func不支持Out,ref类型的参数,所以需要自定义个delegate func来满足需求.具体代码如下 public delegate TResult FuncEX<T1, T2, T ...

  9. windows系统下同时安装mysql5.5和8.0.11

    前提:电脑已安装5.5,增安装8.0.11 zip版本 1.官网下载mysql10.8.0.11 —找到mysql community server 为下载页面URL:https://dev.mysq ...

  10. [LeetCode] 200. Number of Islands 岛屿的数量

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...