首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring中动态设立Quartz的cronExpression

2012-11-19 
Spring中动态设置Quartz的cronExpression??? ?什么是动态定时任务:是由客户制定生成的,服务端只知道该去执

Spring中动态设置Quartz的cronExpression

?

?? ?什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。?? ?这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现
  ?
<bean id="cronTrigger" >     <property name="jobDetail" ref="schedulerJobDetail"/>     <property name="cronExpression">         <value>0/10 * * * * ?</value>     </property> </bean>
?

其中,cronExpression是关键,如果可以动态设置cronExpression的值,也就说如果我们可以直接调用CronTriggerBean中设置cronExpression的方法,就可以顺利解决问题了。熟悉1的朋友可以跳过不看,下面2、3是动态定时任务的具体实现。
1.?Quartz在Spring中的简单配置Spring配置文件:
<bean id="schedulerJobDetail" ref="scheduleInfoAction"/>        <property name="targetMethod" value="simpleJobTest"/>        <property name="concurrent" value="false"/>    </bean>    <bean id="cronTrigger" >         <property name="jobDetail" ref="schedulerJobDetail"/>         <property name="cronExpression">             <value>0/10 * * * * ?</value>         </property>     </bean>    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <list>                <ref local="cronTrigger"/>            </list>        </property></bean>
?在上面的配置中设定了① targetMethod: 指定需要定时执行scheduleInfoAction中的simpleJobTest()方法② concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。③ cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。④ triggers:通过再添加其他的ref元素可在list中放置多个触发器。?scheduleInfoAction中的simpleJobTest()方法注意:此方法没有参数,如果scheduleInfoAction有两个方法simpleJobTest()和simpleJobTest(String argument),则spring只会去执行无参的

热点排行