这一部分记录的东西有点杂。
- 如何在job中使用从trigger传进来的数据。
- 如何在spring里面配置一个直接存进数据库的job。
- 如何让多个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: