2
<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 进行编码,因此我们无法在本地捕获此错误。现在唯一的方法是改变石英作业的运行时间来强制它发生。当我们在本地 dev 上运行时,我们希望强制这些 bean 在启动时初始化。有没有办法做到这一点?

4

1 回答 1

0

如果可能的话,我会将您的 bean 与 Quartz 工作分离。然后你可以在你的 spring 配置中单独初始化你的 bean,它不需要知道 Quartz。然后我会使用弹簧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>
于 2013-03-18T14:35:37.487 回答