2、quartz程序实例
来源:互联网 发布:黑光灯诱捕法估算法 编辑:程序博客网 时间:2024/05/21 09:47
场景一:设置时间间隔执行定时任务
1、引入quartz必须的包
2、新建一个定时任务实例
继承Job方法,实现execute方法,方法里面就是你要执行的内容
package com.cn.demo1;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class Task1 implements Job{@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("第一个定时任务实例!");}}
2、新建一个定时任务启动方法
package com.cn.demo1;import java.util.Date;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleTrigger;import org.quartz.impl.StdSchedulerFactory;public class StartTask1 {/** * log4j:WARN No appenders could be found for logger (org.quartz.simpl.SimpleThreadPool). log4j:WARN Please initialize the log4j system properly. 定时任务执行报如上错,因为缺少log4j.properties配置文件的缘故 */public static void main(String[] args) throws SchedulerException {start();}private static void start() throws SchedulerException {//通过SchedulerFactory来获取一个调度器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); //引进作业程序 JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", Task1.class); //new一个触发器 SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1"); //设置作业启动时间 long ctime = System.currentTimeMillis(); simpleTrigger.setStartTime(new Date(ctime)); //设置作业执行间隔 simpleTrigger.setRepeatInterval(10000); //设置作业执行次数 simpleTrigger.setRepeatCount(5); //设置作业执行优先级默认为5 //simpleTrigger.setPriority(10); //作业和触发器设置到调度器中 scheduler.scheduleJob(jobDetail, simpleTrigger); //启动调度器 scheduler.start();}}
值得注意的是:启动的时候,作业执行次数是5,但是实际上,定时任务执行了6次。定时任务启动,会先执行一次,然后,重复5次。所以,最终会输出6次打印结果。
另外,针对log4j:WARN No appenders could be found for logger (org.quartz.simpl.SimpleThreadPool).
log4j:WARN Please initialize the log4j system properly.
是因为缺少log4j.properties配置文件的缘故,大家根据需要加上即可,不影响程序运行。
场景二:在某些特定的时间点执行。
这个时候,我们就需要采用CronTrigger,通过配置cron表达式,定时执行。
下面我们来看一个实例:
1、新建一个定时任务实例
package com.cn.demo2;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.StatefulJob;public class Task2 implements Job{@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("第二个定时任务实例!");}}
2、新建一个定时任务启动方法
package com.cn.demo2;import java.text.ParseException;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.impl.StdSchedulerFactory;public class StartTask2 {public static void main(String[] args) throws SchedulerException, ParseException {start();}private static void start() throws SchedulerException, ParseException { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = new JobDetail("myJob", Scheduler.DEFAULT_GROUP, Task2.class); CronTrigger trigger = new CronTrigger("crontrigger",Scheduler.DEFAULT_GROUP, "* * * * * ?"); trigger.getJobDataMap().put("count", 0); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); }}
3、启动,输出结果
场景三:同一时刻相同的job只有一个在执行【有状态作业】
如果使用了Quartz,当然在一个系统中绝不仅仅是一个job那么简单,如果同一个job同一时刻运行,可能会造成重复入库的情况。
所以我们希望多线程时,能够控制同一时刻相同job只能有一个正在执行。
quartz提供了Job之外的接口:org.quartz.StatefulJob
我们只需要将org.quartz.Job替换成org.quartz.StatefulJob接口。实现org.quartz.StatefulJob接口即可。
当第二次job启动的时候第一个job还没执行完,第二个job会一直阻塞直到第一个job执行完毕。
- 2、quartz程序实例
- 定时执行程序-Quartz简单实例
- Quartz 2D 实例:Watermark
- Quartz实例
- Quartz实例
- quartz 实例
- quartz, 实例
- Quartz+spring实例应用
- quartz使用实例
- quartz使用实例
- Quartz实例关键字:
- Quartz+spring实例应用
- Quartz+spring实例应用
- quartz入门实例
- Quartz 配置实例
- Spring + Quartz配置实例
- Spring + Quartz配置实例
- Quartz---入门级实例
- Java 获得CPU占有率
- android 常见 的轮播图(可以手动和自动轮换)
- (6)Mysql运算符和函数
- 自己实现一个简单的布谷鸟散列
- 在一个线程加锁,另一个线程解锁
- 2、quartz程序实例
- Web框架的本质
- 请教<context:component-scan/>和<mvc:annotation-driven/>的区别
- Python实现标准的Kmeans算法
- Android应用开发之所有动画使用详解
- SpringMvc+POI 处理Excel的导入操作(一般form提交和jquery.form.js提交)
- Tensorflow安装-Anacoda
- 算法-->级数
- 学习SPI的一些疑惑