quartz 定时器执行
类存储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 定时器执行的更多相关文章
- 学习笔记--Quartz定时器
文章同步发表在博主网站朗度云,传输门:http://www.wolfbe.com/detail/201608/338.html 1.Quartz定时器执行流程 Quartz需要定义执行任务.触发器,在 ...
- Spring的quartz定时器同一时刻重复执行二次的问题解决
最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...
- Spring的quartz定时器重复执行二次的问题解决
Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...
- java定时器,Spring定时器和Quartz定时器
一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...
- java Quartz定时器任务与Spring task定时的几种实现,
java Quartz定时器任务与Spring task定时的几种实现 基于java 的定时任务实现, Quartz 时间详细配置 请查阅 http://www.cnblogs.com/si ...
- 实现quartz定时器及quartz定时器原理介绍(转)
一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...
- 关于Spring的Quartz定时器设定
在实际的开发业务中经常会遇到定时执行某个任务,如果项目使用的ssh框架的话,就需要配合spring来使用定时器.spring的定时器是一个固定的配置格式,具体的applicationContext配置 ...
- Quartz定时器中Cron时间控制表达式写法
Quartz定时器中Cron时间控制表达式写法: 1.表示形式 该表达式简洁简单,总共有7个空格分割的表达子式,形式为[* * * * * * *],而这七个位置上的东西表达方式有很多,意义从左往 ...
- 动态添加定时任务-quartz定时器
Quartz动态添加.修改和删除定时任务 在项目中有一个需求,需要灵活配置调度任务时间,刚开始用的Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务 ...
随机推荐
- BMP文件格式详解(BMP file format)
BMP文件格式,又称为Bitmap(位图),或是DIB(Device-Independent Device,设备无关图),是windows系统中广泛使用的图片文件格式,由于它可以不作任何变换地址保存图 ...
- Detection of Glacier Calving Margins with Convolutional Neural Networks: A Case Study
利用Unet结构对landsat数据进行冰川裂缝提取,结构如下:训练集很小只有123张152*240图片
- php . extension_loaded
(PHP 4, PHP 5, PHP 7) extension_loaded — 检查一个扩展是否已经加载 如果 name 指定的扩展已加载,返回TRUE,否则返回 FALSE. Example #1 ...
- webpack构建篇
WEBPack 构建 -- 基于webpack4 1.环境准备 NodeJs: 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.其使用了一个事件驱动.非阻塞式 I/O 的模 ...
- 解读 | 你真正理解什么是Cloud Native吗?
你能做到每周.每天甚至每个钟头向客户发布新特性吗?新加入的开发者能够在他们工作的第一天甚至面试阶段就能部署代码吗?部署新员工的代码后,你能因为确信应用程序运行正常而安然入睡吗?建立快速发布机制,包括支 ...
- Python Selenium Webdriver常用方法总结
Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: m ...
- 爬虫urllib2库的基本使用
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,urllib2库基本使用. urllib2 是 Python2.7 自带的模块 ...
- Idea控制台中文乱码
在菜单栏找到”run->editconfigration” 找到”server”选项卡 设置 vm option为 -Dfile.encoding=utf-8
- [LeetCode] 387. First Unique Character in a String 字符串的第一个唯一字符
Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...
- Spring boot后台搭建二集成Shiro添加Remember Me
上一片文章实现了用户验证 查看 当用户成功登录后,关闭浏览器,重新打开浏览器访问http://localhost:8080,页面会跳转到登录页,因为浏览器的关闭后之前的登录已失效 Shiro提供了R ...