Quartz in Spring memo: part 5

这一部分记录的东西有点杂。

  1. 如何在job中使用从trigger传进来的数据。
  2. 如何在spring里面配置一个直接存进数据库的job。
  3. 如何让多个trigger重复使用同一个job。

第一个问题,要在job中使用从trigger传进来的数据,直接在job类里面,从context里面拿到mergedJobDataMap,就可以拿到trigger传进来的数据了。代码如下:

   1: public void execute(JobExecutionContext context) throws JobExecutionException {
   2:     Map map = context.getMergedJobDataMap();
   3: }

第二个问题,在spring里面加上job details的bean,然后在SchedulerFactoryBean里面加进去即可:

   1: <bean id="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
   2:     <property name="jobClass" value="quartz.PersistentJob"/>
   3:     <property name="name" value="myjob"/>
   4:     <property name="group" value="jobs"/>
   5:     ...
   6: </bean>
   7: <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   8:     <property name="triggers">
   9:         <list>
  10:         </list>
  11:     </property>
  12:     <property name="jobDetails">
  13:         <list>
  14:             <ref local="myJobDetail"/>
  15:         </list>
  16:     </property>
  17:     <property name="dataSource" ref="dataSource"/>
  18:     <property name="configLocation" value="classpath:quartz.properties"/>
  19: </bean>

第三个问题,需要把job details的durable属性设成true。如果在spring里面配置,就是把job details的duration属性设成true。这样这个job在被trigger并且运行完成以后,也不会被删掉。否则,被trigger然后job运行完以后,这个job details就会被从quartz的数据库里面删掉了

   1: <bean id="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
   2:     <property name="jobClass" value="quartz.PersistentJob"/>
   3:     <property name="name" value="myjob"/>
   4:     <property name="group" value="jobs"/>
   5:     <property name="durability" value="true"/>
   6: </bean>

Related posts:

  1. Quartz in Spring memo: part 1
  2. Quartz in Spring memo: part 6
This entry was posted in java, memo and tagged , , . Bookmark the permalink.
blog comments powered by Disqus