如何在启动时初始化石英调度程序中的bean?

时间:2013-02-28 20:06:18

标签: spring javabeans quartz-scheduler

<bean name="MyJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" value="com.package.scheduler.MyJob"/>
        <property name="jobDataAsMap">
            <map>
                <entry key="numArr" value="10,20,30"/>
            </map>
        </property>
</bean>

我定义了一个石英工作,在凌晨1:30运行。问题是这个数组定义不起作用

<entry key="numArr" value="10,20,30"/>

我们不得不使用列表。由于bean在石英作业开始之前没有初始化,并且我们不太可能在凌晨1:30进行编码,因此我们无法在本地捕获此错误。现在唯一的办法就是改变石英作业的运行时间以强制它发生。当我们在本地开发时运行时,我们希望强制在启动时初始化这些bean。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

如果可能的话,我会将你的bean与Quartz的工作分开。然后,您可以在弹簧配置中单独初始化bean,并且不需要了解Quartz。然后我会使用spring MethodInvokingJobDetailFactoryBean在你的解耦对象上调用一个方法。

例如类似的内容:

<bean id="myBean class="...">
    <property name="numArr" value="10,20,30"/>
</bean>

<bean id="myJob"
      class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     <property name="targetObject" ref="myBean" />
     <property name="targetMethod" value="doSomething" />
</bean>

<bean id="staleTraderRatesTrigger"
      class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="myJob" />
    <property name="cronExpression" value="0 30 1 * * ?" />
</bean>