参考资料
1 quartz 学习笔记
http://chinaxxren.iteye.com/blog/897989
任务和触发器是quartz的两大块核心。触发器分CronTrigger 和SimpleTrigger
CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger 而言是一大改进。掌握CronTrigger,是非常必要,掌握Quartz cron 表达式是学习CronTrigger的关键所在!
环境: XP+Myeclipse6.5+JDK1.6+Quartz2
一 具体代码
1 SimpleJob.java
- package org.quartz.examples.example3;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- import org.quartz.JobKey;
- import org.quartz.Scheduler;
- import org.quartz.SchedulerException;
- import org.quartz.TriggerKey;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class SimpleJob implements Job {
- private static int jobCount = 0;
- private static Logger _log = LoggerFactory.getLogger(SimpleJob.class);
- private Scheduler sched = null;
- public SimpleJob() throws SchedulerException {
- sched = SchedFacory.getScheduler();
- }
- public void execute(JobExecutionContext context)
- throws JobExecutionException {
- JobKey jobKey = context.getJobDetail().getKey();
- TriggerKey triggerKey = context.getTrigger().getKey();
- //启动线程监听触发器的状态
- new Thread(new SchedEventLister(triggerKey)).start();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- _log.info("任务分组名称: " + jobKey.getGroup()+",任务名称: " + jobKey.getName()+",触发器组名称: " + triggerKey.getGroup()+ ",触发器名称: "+triggerKey.getName()+" 执行时间: " + sdf.format(new Date()) + ",计数: " + (++jobCount)) ;
- //如果任务执行超过20次就结束它
- /* if(jobCount > 5){
- _log.warn("结束任务...");
- try {
- //Delete the identified Job from the Scheduler - and any associated Triggers.
- //从调度器中删除这个唯一任务时同时会删除相关联的触发器^_^
- sched.deleteJob(jobKey);
- sched.resumeJob(jobKey);
- } catch (SchedulerException e) {
- e.printStackTrace();
- }
- }*/
- if(jobCount == 15 ){
- _log.warn("已经暂停了触发器...,触发器组名: " + triggerKey.getGroup() + ",触发器名称: " + triggerKey.getName());
- //暂停触发器
- try {
- sched.pauseTrigger(triggerKey);
- } catch (SchedulerException e) {
- throw new RuntimeException(e);
- }
- }
- if(jobCount == 20){
- _log.error("正在停止并且移除触发器...,触发器组名: " + triggerKey.getGroup() + ",触发器名称: " + triggerKey.getName());
- try {
- sched.resumeTrigger(triggerKey);//停止触发器
- sched.unscheduleJob(triggerKey);//移除触发器
- } catch (SchedulerException e) {
- throw new RuntimeException(e);
- }
- }
- }
- }
2 CronTriggerExample.java
- package org.quartz.examples.example3;
- import static org.quartz.CronScheduleBuilder.cronSchedule;
- import static org.quartz.JobBuilder.newJob;
- import static org.quartz.TriggerBuilder.newTrigger;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.quartz.CronTrigger;
- import org.quartz.JobDetail;
- import org.quartz.Scheduler;
- import org.quartz.SchedulerMetaData;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class CronTriggerExample {
- public void run() throws Exception {
- Logger log = LoggerFactory.getLogger(CronTriggerExample.class);
- //SchedulerFactory sf = new StdSchedulerFactory();
- Scheduler sched = SchedFacory.getScheduler();// sf.getScheduler();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- CronTrigger trigger = null;
- JobDetail job = null;
- Date ft = null;
- /* job = newJob(SimpleJob.class)
- .withIdentity("job1", "group1")
- .build();
- //表示每20秒执行一次
- trigger = newTrigger()
- .withIdentity("trigger1", "group1")
- .withSchedule(cronSchedule("0/20 * * * * ?"))
- .build();*/
- /*
- job = newJob(SimpleJob.class)
- .withIdentity("job2", "group1")
- .build();
- //每2分钟执行一次,并且启动时间为:15秒之后开始,例如: 2011-07-08 04:44:15,2011-07-08 04:46:15 ...
- trigger = newTrigger()
- .withIdentity("trigger2", "group1")
- .withSchedule(cronSchedule("15 0/2 * * * ?"))
- .build();*/
- job = newJob(SimpleJob.class)
- .withIdentity("job3", "group1")
- .build();
- //在8-17之间每2分钟执行一次
- /*trigger = newTrigger()
- .withIdentity("trigger3", "group1")
- .withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
- .build();*/
- //在8-17之间每1分钟执行一次,并且为10秒间隔
- trigger = newTrigger()
- .withIdentity("trigger3", "group1")
- .withSchedule(cronSchedule("0/10 0/1 8-17 * * ?"))
- .build();
- /* job = newJob(SimpleJob.class)
- .withIdentity("job4", "group1")
- .build();
- //在16与23之间每3分钟执行一次
- trigger = newTrigger()
- .withIdentity("trigger4", "group1")
- .withSchedule(cronSchedule("0 0/3 16-23 * * ?"))
- .build();*/
- /*job = newJob(SimpleJob.class)
- .withIdentity("job5", "group1")
- .build();
- trigger = newTrigger()
- .withIdentity("trigger5", "group1")
- .withSchedule(cronSchedule("0 0 10am 1,15 * ?"))
- .build();*/
- /* job = newJob(SimpleJob.class)
- .withIdentity("job6", "group1")
- .build();
- //2011-07-08 05:11:00,2011-07-08 05:11:02,2011-07-08 05:12:00,2011-07-08 05:12:02
- //第二周到第六周之间执行并且:执行秒数为:0,2各执行一次,没有明白为什么要间隔1分钟后触发,如上.
- trigger = newTrigger()
- .withIdentity("trigger6", "group1")
- .withSchedule(cronSchedule("0,2 * * ? * MON-FRI"))
- .build();*/
- /*
- job = newJob(SimpleJob.class)
- .withIdentity("job7", "group1")
- .build();
- trigger = newTrigger()
- .withIdentity("trigger7", "group1")
- .withSchedule(cronSchedule("0,30 * * ? * SAT,SUN"))
- .build();*/
- ft = sched.scheduleJob(job, trigger);
- log.info(job.getKey() + " has been scheduled to run at: " + sdf.format(ft)
- + " and repeat based on expression: "
- + trigger.getCronExpression());
- sched.start();
- try {
- //5分钟
- Thread.sleep(300L * 1000L);
- } catch (Exception e) {
- }
- log.info("------- Shutting Down ---------------------");
- sched.shutdown(true);
- log.info("------- Shutdown Complete -----------------");
- SchedulerMetaData metaData = sched.getMetaData();
- log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
- }
- public static void main(String[] args) throws Exception {
- CronTriggerExample example = new CronTriggerExample();
- example.run();
- }
- }
3 SchedEventLister.java
- public class SchedEventLister implements Runnable {
- private static Logger _log = LoggerFactory
- .getLogger(SchedEventLister.class);
- private Scheduler sched = null;
- private TriggerKey triggerKey = null;
- public SchedEventLister(TriggerKey triggerKey) {
- _log.info("触发器线程监听启动....");
- this.triggerKey = triggerKey;
- try {
- sched = SchedFacory.getScheduler();
- } catch (SchedulerException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void run() {
- _log.info("触发器线程监听中。。。。"
- + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
- .format(new Date()));
- // 获取当前触发器的状态
- Trigger.TriggerState ts = null;
- try {
- ts = sched.getTriggerState(triggerKey);
- } catch (SchedulerException e) {
- e.printStackTrace();
- }
- // 如果为暂停状态就恢复
- if (ts == Trigger.TriggerState.PAUSED) {
- //暂停10秒在恢复
- try {
- _log.warn("暂停当前线程5秒钟后在恢复触发器...,触发器组名: " + triggerKey.getGroup()
- + ",触发器名称: " + triggerKey.getName());
- Thread.sleep(5L*1000L);
- } catch (InterruptedException e1) {
- e1.printStackTrace();
- }
- // 恢复触发器
- _log.warn("正在恢复了触发器...,触发器组名: " + triggerKey.getGroup()
- + ",触发器名称: " + triggerKey.getName());
- try {
- sched.resumeTrigger(triggerKey);
- } catch (SchedulerException e) {
- throw new RuntimeException(e);
- }
- } else if (ts == Trigger.TriggerState.NORMAL) {
- _log.info("触发器线程监听中。。。。,状态:正常 ");
- } else if (ts == Trigger.TriggerState.NONE) {
- _log.info("触发器线程监听中。。。。,状态:没有触发器 ");
- } else if (ts == Trigger.TriggerState.ERROR) {
- _log.info("触发器线程监听中。。。。,状态:错误 ");
- } else if (ts == Trigger.TriggerState.BLOCKED) {
- _log.info("触发器线程监听中。。。。,状态:堵塞 ");
- }
- }
- }
4 SchedFacory.java
- import org.quartz.Scheduler;
- import org.quartz.SchedulerException;
- import org.quartz.SchedulerFactory;
- import org.quartz.impl.StdSchedulerFactory;
- /**
- *Title:
- *Description:
- *Copyright: Copyright (c) 2011
- *Company:http://liuzidong.iteye.com/
- *Makedate:2011-7-11 上午09:55:36
- * @author liuzidong
- * @version 1.0
- * @since 1.0
- *
- */
- public class SchedFacory {
- private static SchedulerFactory sf = new StdSchedulerFactory();
- public static Scheduler getScheduler() throws SchedulerException{
- return sf.getScheduler();
- }
- }
5 输出结果如下:
- [INFO] 2011-07-11 02:54:56.796 下午 main [org.quartz.simpl.SimpleThreadPool]
- Job execution threads will use class loader of thread: main
- [INFO] 2011-07-11 02:54:56.812 下午 main [org.quartz.core.SchedulerSignalerImpl]
- Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
- [INFO] 2011-07-11 02:54:56.812 下午 main [org.quartz.core.QuartzScheduler]
- Quartz Scheduler v.2.0.1 created.
- [INFO] 2011-07-11 02:54:56.812 下午 main [org.quartz.simpl.RAMJobStore]
- RAMJobStore initialized.
- [INFO] 2011-07-11 02:54:56.812 下午 main [org.quartz.core.QuartzScheduler]
- Scheduler meta-data: Quartz Scheduler (v2.0.1) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
- Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
- NOT STARTED.
- Currently in standby mode.
- Number of jobs executed: 0
- Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
- Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
- [INFO] 2011-07-11 02:54:56.812 下午 main [org.quartz.impl.StdSchedulerFactory]
- Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
- [INFO] 2011-07-11 02:54:56.812 下午 main [org.quartz.impl.StdSchedulerFactory]
- Quartz scheduler version: 2.0.1
- [INFO] 2011-07-11 02:54:56.828 下午 main [org.quartz.examples.example3.CronTriggerExample]
- group1.job3 has been scheduled to run at: 2011-07-11 02:55:00 and repeat based on expression: 0/10 0/1 8-17 * * ?
- [INFO] 2011-07-11 02:54:56.828 下午 main [org.quartz.core.QuartzScheduler]
- Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
- [INFO] 2011-07-11 02:55:00.015 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:55:00.015 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:55:00,计数: 1
- [INFO] 2011-07-11 02:55:00.015 下午 Thread-2 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:55:00
- [INFO] 2011-07-11 02:55:00.015 下午 Thread-2 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:55:10.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:55:10.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:55:10,计数: 2
- [INFO] 2011-07-11 02:55:10.000 下午 Thread-3 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:55:10
- [INFO] 2011-07-11 02:55:10.000 下午 Thread-3 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:55:20.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:55:20.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:55:20,计数: 3
- [INFO] 2011-07-11 02:55:20.000 下午 Thread-4 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:55:20
- [INFO] 2011-07-11 02:55:20.000 下午 Thread-4 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:55:30.000 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:55:30.000 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:55:30,计数: 4
- [INFO] 2011-07-11 02:55:30.000 下午 Thread-5 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:55:30
- [INFO] 2011-07-11 02:55:30.000 下午 Thread-5 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:55:40.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:55:40.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:55:40,计数: 5
- [INFO] 2011-07-11 02:55:40.000 下午 Thread-6 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:55:40
- [INFO] 2011-07-11 02:55:40.000 下午 Thread-6 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:55:50.000 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:55:50.000 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:55:50,计数: 6
- [INFO] 2011-07-11 02:55:50.000 下午 Thread-7 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:55:50
- [INFO] 2011-07-11 02:55:50.000 下午 Thread-7 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:56:00.000 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:56:00.000 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:56:00,计数: 7
- [INFO] 2011-07-11 02:56:00.000 下午 Thread-8 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:56:00
- [INFO] 2011-07-11 02:56:00.000 下午 Thread-8 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:56:10.000 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:56:10.000 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:56:10,计数: 8
- [INFO] 2011-07-11 02:56:10.000 下午 Thread-9 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:56:10
- [INFO] 2011-07-11 02:56:10.000 下午 Thread-9 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:56:20.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:56:20.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:56:20,计数: 9
- [INFO] 2011-07-11 02:56:20.000 下午 Thread-10 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:56:20
- [INFO] 2011-07-11 02:56:20.000 下午 Thread-10 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:56:30.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:56:30.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:56:30,计数: 10
- [INFO] 2011-07-11 02:56:30.000 下午 Thread-11 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:56:30
- [INFO] 2011-07-11 02:56:30.000 下午 Thread-11 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:56:40.000 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:56:40.000 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:56:40,计数: 11
- [INFO] 2011-07-11 02:56:40.000 下午 Thread-12 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:56:40
- [INFO] 2011-07-11 02:56:40.000 下午 Thread-12 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:56:50.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:56:50.000 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:56:50,计数: 12
- [INFO] 2011-07-11 02:56:50.000 下午 Thread-13 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:56:50
- [INFO] 2011-07-11 02:56:50.000 下午 Thread-13 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:57:00.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:57:00.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:57:00,计数: 13
- [INFO] 2011-07-11 02:57:00.000 下午 Thread-14 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:57:00
- [INFO] 2011-07-11 02:57:00.000 下午 Thread-14 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:57:10.000 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:57:10.000 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:57:10,计数: 14
- [INFO] 2011-07-11 02:57:10.000 下午 Thread-15 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:57:10
- [INFO] 2011-07-11 02:57:10.000 下午 Thread-15 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:57:20.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:57:20.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:57:20,计数: 15
- [WARN] 2011-07-11 02:57:20.000 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example3.SimpleJob]
- 已经暂停了触发器...,触发器组名: group1,触发器名称: trigger3
- [INFO] 2011-07-11 02:57:20.000 下午 Thread-16 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:57:20
- [WARN] 2011-07-11 02:57:20.000 下午 Thread-16 [org.quartz.examples.example3.SchedEventLister]
- 暂停当前线程5秒钟后在恢复触发器...,触发器组名: group1,触发器名称: trigger3
- [WARN] 2011-07-11 02:57:25.000 下午 Thread-16 [org.quartz.examples.example3.SchedEventLister]
- 正在恢复了触发器...,触发器组名: group1,触发器名称: trigger3
- [INFO] 2011-07-11 02:57:30.015 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:57:30.031 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:57:30,计数: 16
- [INFO] 2011-07-11 02:57:30.031 下午 Thread-17 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:57:30
- [INFO] 2011-07-11 02:57:30.031 下午 Thread-17 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:57:40.000 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:57:40.000 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:57:40,计数: 17
- [INFO] 2011-07-11 02:57:40.000 下午 Thread-18 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:57:40
- [INFO] 2011-07-11 02:57:40.000 下午 Thread-18 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:57:50.000 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:57:50.000 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:57:50,计数: 18
- [INFO] 2011-07-11 02:57:50.000 下午 Thread-19 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:57:50
- [INFO] 2011-07-11 02:57:50.000 下午 Thread-19 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:58:00.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:58:00.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:58:00,计数: 19
- [INFO] 2011-07-11 02:58:00.000 下午 Thread-20 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:58:00
- [INFO] 2011-07-11 02:58:00.000 下午 Thread-20 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:58:10.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听启动....
- [INFO] 2011-07-11 02:58:10.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example3.SimpleJob]
- 任务分组名称: group1,任务名称: job3,触发器组名称: group1,触发器名称: trigger3 执行时间: 2011-07-11 02:58:10,计数: 20
- [INFO] 2011-07-11 02:58:10.000 下午 Thread-21 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。2011-07-11 02:58:10
- [ERROR] 2011-07-11 02:58:10.000 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example3.SimpleJob]
- 正在停止并且移除触发器...,触发器组名: group1,触发器名称: trigger3
- [INFO] 2011-07-11 02:58:10.000 下午 Thread-21 [org.quartz.examples.example3.SchedEventLister]
- 触发器线程监听中。。。。,状态:正常
- [INFO] 2011-07-11 02:59:56.828 下午 main [org.quartz.examples.example3.CronTriggerExample]
- ------- Shutting Down ---------------------
- [INFO] 2011-07-11 02:59:56.828 下午 main [org.quartz.core.QuartzScheduler]
- Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.
- [INFO] 2011-07-11 02:59:56.828 下午 main [org.quartz.core.QuartzScheduler]
- Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
- [INFO] 2011-07-11 02:59:56.828 下午 main [org.quartz.core.QuartzScheduler]
- Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.
- [INFO] 2011-07-11 02:59:56.828 下午 main [org.quartz.examples.example3.CronTriggerExample]
- ------- Shutdown Complete -----------------
- [INFO] 2011-07-11 02:59:56.828 下午 main [org.quartz.examples.example3.CronTriggerExample]
- Executed 20 jobs.
相关推荐
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
模型权重文件介绍 1. 基于开源数据集训练,训练集包含15000+图片,训练100 epochs 2. 基于YOLO11x模型进行的训练 3. 模型识别类别有2类:helmet、no-helmet
ARM仿真器快速使用资料+绿色版软件 附视频-20210701.zip
内容概要:本文详细介绍了QY20B型汽车起重机液压系统的设计过程,涵盖其背景、发展史、主要运动机构及其液压回路设计。文章首先概述了汽车起重机的分类和发展历程,强调了液压技术在现代起重机中的重要性。接着,文章深入分析了QY20B型汽车起重机的五大主要运动机构(支腿、回转、伸缩、变幅、起升)的工作原理及相应的液压回路设计。每个回路的设计均考虑了性能要求、功能实现及工作原理,确保系统稳定可靠。此外,文章还详细计算了支腿油缸的受力、液压元件的选择及液压系统的性能验算,确保设计的可行性和安全性。 适合人群:从事工程机械设计、液压系统设计及相关领域的工程师和技术人员,以及对起重机技术感兴趣的高等院校学生和研究人员。 使用场景及目标:①为从事汽车起重机液压系统设计的工程师提供详细的参考案例;②帮助技术人员理解和掌握液压系统设计的关键技术和计算方法;③为高等院校学生提供学习和研究起重机液压系统设计的实用资料。 其他说明:本文不仅提供了详细的液压系统设计过程,还结合了实际工程应用,确保设计的实用性和可靠性。文中引用了大量参考文献,确保设计依据的科学性和权威性。阅读本文有助于读者深入了解汽车起重机液压系统的设计原理和实现方法,为实际工程应用提供有力支持。
Unity Beautify 3 - Advanced Post Processing 23.0版本
基于数据包络分析的中国旅游业发展效率特征
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
# 基于蓝牙技术的多通道键盘 ## 项目简介 在多设备工作环境中,用户常常需要在家庭电脑、工作笔记本或平板电脑之间频繁切换键盘输入,这不仅占用了大量桌面空间,而且操作不便。本项目旨在通过蓝牙技术,设计一款能够同时连接多个设备并实现一键切换的多通道键盘,从而简化用户的操作流程,提高工作效率。 ## 项目的主要特性和功能 1. 多设备连接键盘可以同时连接多达三个不同的设备。 2. 一键切换通过按键即可快速切换输入目标设备。 3. 高性能微控制器采用ATMega32u4微控制器,提供足够的GPIO引脚,支持Arduino编程环境,便于固件开发和升级。 4. 蓝牙模块使用RN42蓝牙模块,确保稳定的设备连接和数据传输。 5. 电压调节器使用MIC4680电压调节器,确保系统稳定供电。 ## 安装使用步骤 1. 硬件准备 获取ATMega32u4微控制器、RN42蓝牙模块、MIC4680电压调节器等硬件组件。 2. 电路设计
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
基于Vue.js和SpringBoot的研究生调研管理系统.zip
地理信息文件,许昌市各县区政区图,shp格式,可编辑
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
Scratch放飞气球 2024年9月电子学会scratch三级考试真题源代码 综合考查角色添加、背景添加、初始位置、移动步数、方向旋转、造型切换、左右翻转、碰到边缘反弹、无限循环、条件判断、鼠标控制、碰撞检测等积木的使用;难点在于: 如何实现蝙蝠不断移动 如何实现蝙蝠边移动边挥翅膀 如何实现Ripley跟随鼠标移动 如何实现蝙蝠碰到Ripley移到随机位置 充分掌握重复执行和碰撞检测积木的使用 详细解题思路和步骤可以查看博客: https://scratch.blog.csdn.net/article/details/142934767 小兔子编程给小朋友们分享各种少儿编程(Scratch编程、python编程、C++编程等)学习、考级和比赛相关资料;更多少儿编程相关的学习资料,可以访问博主博客 https://blog.csdn.net/frank2102 期待小朋友们相互交流学习,有什么问题,建议或者意见可以直接给博主留言,或者私下,博主看到后会第一时间给到您相应的回复
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
前端分析-2023071100789s102102
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
风玫瑰图的数据包,直接导入即可
# 基于PHP框架的新闻发布系统 ## 项目简介 这是一个基于PHP框架的新闻发布系统,借助PHP和MySQL数据库实现新闻的创建、查看、编辑与删除功能。系统包含前台新闻展示页和后台管理页,管理员可进行新闻的添加、编辑和删除操作,用户则能浏览新闻。 ## 项目的主要特性和功能 1. 采用PHP和MySQL数据库存储与管理新闻数据。 2. 提供用户友好界面,方便用户浏览新闻。 3. 管理员可登录后台管理页对新闻进行添加、编辑和删除操作。 4. 新闻列表页动态生成新闻列表,依据后台数据库数据显示。 5. 新闻详情页展示新闻详细内容,涵盖标题、内容和发布时间。 6. 后台管理页具备新闻管理基本功能,如添加、编辑和删除新闻。 7. 运用MVC(Model View Controller)架构,分离数据和业务逻辑与表示层,提升代码可维护性和可扩展性。 ## 安装使用步骤 1. 下载并解压项目文件。
内容概要:本文档提供了一个完整的LaTeX报告模板,用于复现MATLAB元素级运算实验。文档详细介绍了如何使用LaTeX编写报告,包括文档结构设置、标题生成、IMRAD(引言、方法、结果、分析和讨论)各部分内容的编写方法。在方法部分,重点展示了MATLAB中元素级运算的符号(如.*、./、.\^),并用数学公式解释了元素级乘法的运算规则。结果部分通过插入图形展示了使用元素级运算绘制的二次函数图像,分析部分则通过表格对比了不同元素级运算的结果。最后,讨论部分总结了元素级运算的特点及其在MATLAB编程中的重要性,并展望了其在图像和信号处理中的应用前景。; 适合人群:对LaTeX排版和MATLAB编程有一定了解的学生、教师以及科研工作者。; 使用场景及目标:①学习如何使用LaTeX撰写科学报告,掌握LaTeX的基本语法和常用包的使用;②理解MATLAB中元素级运算的原理及其与常规矩阵运算的区别;③通过实际操作MATLAB代码生成图形,加深对元素级运算的理解。; 阅读建议:读者应按照文档的指导逐步实践,先安装所需的LaTeX编译环境和MATLAB软件,再根据提供的MATLAB代码生成所需图形,最后将图形文件插入LaTeX文档中编译生成最终的PDF报告。在整个过程中,建议仔细阅读每一段代码和解释,确保理解每一部分的功能和目的。