- 浏览: 461592 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (146)
- Maven (3)
- Quartz (10)
- Hessian (3)
- JDK (42)
- eclipse (4)
- 设计思想 (6)
- XML (8)
- JavaMail (1)
- Spring (11)
- mina (1)
- HsqlDb (1)
- Cache (2)
- Tool (6)
- 心情 (5)
- JQuery (0)
- Hadoop (5)
- Hbase (3)
- 自动构建 (7)
- JNDI (0)
- 代码赏析 (5)
- Oracle (1)
- Excel (4)
- Effective Java (5)
- JAXB (4)
- fdafasdf (1)
- ccc (0)
- web (3)
- concurrent (1)
- CVS (1)
- eclipse plugin (2)
- Apache (10)
最新评论
-
chxiaowu:
nice!
Quartz实现固定执行次数 -
zxjlwt:
学习了。http://surenpi.com
自定义ClassLoader -
kadlly:
public static final Logger log ...
Hessian 权限认证 -
spring_springmvc:
java程序语言学习教程 地址http://www.zuida ...
Java-Final -
liushuiwuyan:
[img][/img]
设计模式-单例
Quartz实现固定执行次数
虽然上一讲中说明,在实际应用中很少用到Quartz实现固定执行次数,但是我就是那个钻牛角尖的人.废话不多,代码如下:
实现思路:
1. 在上一讲中说明Quartz的JobDetail可以是无状态的,也可以是有状态的。Trigger无状态的,所以只能使用JobDetail有状态的子接口StatefulJob.Job代码如下:
根据ApI描述,如果是有状态的Job,所有的Job都共享jobDataMap,所有把执行次数记录下来.虽然我记录了执行次数,但是因为Job是一个Thread,由ThreadPool来维持,那么如何监视Job的执行情况,在看源码中,发现有一个Listener,可以监听进程的执行,代码如下:
在Job的执行中设置执行次数,在监听器中得到执行次数,当执行次数到达count的时候退出执行.
JobQuartz.xml配置如下
在SchedulerFactoryBean中配置监听器列表,在CronTriggerBean配置监听器名称,这样这个监听器就可以监听这个Trigger了,当执行了3次后自动退出
测试代码如下:
测试输出如下:
测试开始
虽然上一讲中说明,在实际应用中很少用到Quartz实现固定执行次数,但是我就是那个钻牛角尖的人.废话不多,代码如下:
实现思路:
1. 在上一讲中说明Quartz的JobDetail可以是无状态的,也可以是有状态的。Trigger无状态的,所以只能使用JobDetail有状态的子接口StatefulJob.Job代码如下:
package test.quartz.spring; import java.util.Date; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.StatefulJob; public class TJob implements StatefulJob { /** * 不用挣扎了,Quartz都是无状态的,他不知道执行了几次。 * 如果想要记录状态就需要持久化到数据库. */ public void execute(JobExecutionContext cntxt) throws JobExecutionException { JobDataMap jobDataMap = cntxt.getJobDetail().getJobDataMap(); Integer count = (Integer) jobDataMap.get("count"); if(count==null){ count=0; } count++; System.out.println("杨春龙,太帅了"); System.out.println("不是我说的"); System.out.println( " Generating report - " + count + "-" + new Date()); jobDataMap.put("count", count); cntxt.getJobDetail().setJobDataMap(jobDataMap); } }
根据ApI描述,如果是有状态的Job,所有的Job都共享jobDataMap,所有把执行次数记录下来.虽然我记录了执行次数,但是因为Job是一个Thread,由ThreadPool来维持,那么如何监视Job的执行情况,在看源码中,发现有一个Listener,可以监听进程的执行,代码如下:
package test.quartz.spring; import org.quartz.CronTrigger; import org.quartz.JobExecutionContext; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.listeners.TriggerListenerSupport; public class TriggerListener extends TriggerListenerSupport { private String name; private Integer count; public void setName(String name) { this.name=name; } public String getName() { // TODO Auto-generated method stub return this.name; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } @Override public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode) { System.out.println("Trigger :"+trigger.getGroup()+"."+trigger.getName()+" completed with code:"+triggerInstructionCode); Integer current = (Integer) context.getJobDetail().getJobDataMap().get("count"); System.out.println("调用次数:"+current); if(current == count){ try { context.getScheduler().shutdown(); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } super.triggerComplete(trigger, context, triggerInstructionCode); } }
在Job的执行中设置执行次数,在监听器中得到执行次数,当执行次数到达count的时候退出执行.
JobQuartz.xml配置如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!--要调度的对象--> <bean id="job" class="test.quartz.spring.TJob"></bean> <bean id="triggerListener" class="test.quartz.spring.TriggerListener"> <property name="name"> <value>triggerListener</value> </property> <property name="count"> <value>3</value> </property> </bean> <!-- 定义目标bean和bean中的方法 --> <bean id="jobtask" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>test.quartz.spring.TJob</value> </property> </bean> <!-- 定义触发的时间 --> <bean id = "cron" class = "org.springframework.scheduling.quartz.CronTriggerBean"> <!-- jobDetail中的name,group都已经设置 --> <property name="jobDetail"> <ref bean="jobtask"/> </property> <property name="triggerListenerNames"> <list> <value>triggerListener</value> </list> </property> <property name="cronExpression"> <value>0/10 * * * * ?</value> </property> </bean> <!-- 总管理 --> <bean autowire = "no" class = "org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local ="cron"/> </list> </property> <!-- 添加监听器 --> <property name="triggerListeners"> <list> <ref bean="triggerListener"/> </list> </property> </bean> </beans>
在SchedulerFactoryBean中配置监听器列表,在CronTriggerBean配置监听器名称,这样这个监听器就可以监听这个Trigger了,当执行了3次后自动退出
测试代码如下:
package test.quartz.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring { /** * @param args */ public static void main(String[] args) { System.out.println("测试开始"); ApplicationContext ctx = new ClassPathXmlApplicationContext("JobQuartz.xml"); System.out.println("测试结束"); } }
测试输出如下:
测试开始
2010-09-27 09:33:39,640 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - <Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0: display name [org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0]; startup date [Mon Sep 27 09:33:39 CST 2010]; root of context hierarchy> 2010-09-27 09:33:39,718 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Loading XML bean definitions from class path resource [JobQuartz.xml]> 2010-09-27 09:33:39,781 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - <Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0]: org.springframework.beans.factory.support.DefaultListableBeanFactory@197a37c> 2010-09-27 09:33:39,812 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@197a37c: defining beans [job,triggerListener,jobtask,cron,org.springframework.scheduling.quartz.SchedulerFactoryBean#0]; root of factory hierarchy> 2010-09-27 09:33:39,953 INFO [org.quartz.core.SchedulerSignalerImpl] - <Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl> 2010-09-27 09:33:39,953 INFO [org.quartz.core.QuartzScheduler] - <Quartz Scheduler v.1.8.3 created.> 2010-09-27 09:33:39,953 INFO [org.quartz.simpl.RAMJobStore] - <RAMJobStore initialized.> 2010-09-27 09:33:39,953 INFO [org.quartz.core.QuartzScheduler] - <Scheduler meta-data: Quartz Scheduler (v1.8.3) 'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' 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. > 2010-09-27 09:33:39,953 INFO [org.quartz.impl.StdSchedulerFactory] - <Quartz scheduler 'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' initialized from an externally provided properties instance.> 2010-09-27 09:33:39,953 INFO [org.quartz.impl.StdSchedulerFactory] - <Quartz scheduler version: 1.8.3> 2010-09-27 09:33:39,953 INFO [org.quartz.core.QuartzScheduler] - <JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@1b09468> 2010-09-27 09:33:39,953 INFO [org.springframework.scheduling.quartz.SchedulerFactoryBean] - <Starting Quartz Scheduler now> 2010-09-27 09:33:39,953 INFO [org.quartz.core.QuartzScheduler] - <Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED started.> 测试结束 杨春龙,太帅了 不是我说的 Generating report - 1-Mon Sep 27 09:33:40 CST 2010 Trigger :DEFAULT.cron completed with code:0 调用次数:1 杨春龙,太帅了 不是我说的 Generating report - 2-Mon Sep 27 09:33:50 CST 2010 Trigger :DEFAULT.cron completed with code:0 调用次数:2 杨春龙,太帅了 不是我说的 Generating report - 3-Mon Sep 27 09:34:00 CST 2010 Trigger :DEFAULT.cron completed with code:0 调用次数:3 2010-09-27 09:34:00,000 INFO [org.quartz.core.QuartzScheduler] - <Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED shutting down.> 2010-09-27 09:34:00,000 INFO [org.quartz.core.QuartzScheduler] - <Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED paused.> 2010-09-27 09:34:00,000 INFO [org.quartz.core.QuartzScheduler] - <Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED shutdown complete.>
发表评论
-
Spring Quartz 持久化解决方案
2011-03-09 14:22 7156Quartz是实现了序列化接口的,包括接口,所以可以使用标准 ... -
Spring与Quartz结合生成定时任务
2011-03-08 13:26 1546<?xml version="1.0&qu ... -
Quartz完成简单任务调度
2010-09-27 15:27 2452SimpleTriggerBean: 简单触发器. star ... -
Quartz简单任务的执行
2010-09-27 14:51 1712废话不多,看完以前的例子,直接点: <?xml ve ... -
Quartz任务的连锁执行
2010-09-27 13:59 3920在任务高度中,当任务执行完后,可能要做一些事情,比如日志等. ... -
Quartz入门(三)
2010-09-27 09:03 2388Quarz入门(三) 前面入程 ... -
Quarz入门(二)
2010-09-26 10:29 2589看完入门一程序,接下来接着讲解入门二. ... -
Quarz入门(一)
2010-09-26 09:51 2041public class QuartzReport imp ... -
Quartz任务调度
2010-09-26 09:45 2042Quartz入门例子 1.建立任务. public cla ...
相关推荐
java + quartz 实现定时任务的简单任务,下载即可运行
定时任务quartz实现分组串行并行动态配置
Springboot整合Quartz实现定时任务数据库动态配置,新增任务、修改cron表达式、暂停任务、恢复任务、删除任务等操作
tomcat启动时立即调用quartz执行一次
quartz.net+TopShelf
spring 定时器 内含TimerTask实现和Quartz实现两种方式
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等
我们要实现定时执行某个方法时,就可以在job目录中加入自己的方法类,但要实现GCJobInterface接口,重写execute 方法即可
利用Quartz.net实现任务调度,保护Quartz.net源代码以及示例程序。
可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合实现动态的改变定时任务的状态的一个...
springboot整合Quartz实现动态配置定时任务源码
spring注解Quartz定时执行功能
使用Quartz调度任务,根据需要人为的终止某个任务,适用于很多常见的场景
spring定时器代码。解决多次执行问题。包含quartz-all.jar包。 说明很详细。希望能帮上哪位朋友。
Spring+Quartz实现任务调度的小例子.本来不要资源分的,可是CSDN发布资源最低要求填写分值为1分,没办法了。
主要实现quartz的时间规则的动态配置以及动态开启和关闭
springboot整合quartz,实现数据库方式执行定时任务。把定时任务信息存进数据库,项目启动后自动执行定时任务。
Quartz如何实现判断某个任务是否正在运行,在项目中用到的,已经测试过了,很好用,分享给大家
Quartz 定时功能 quartz 定时程序 Quartz
Spring-quartz实现定时器(含代码)