1

我有两个相似的豆子。它们被设置为在ScheduledTimerTask.

但是一个工作正常,另一个不行!以下是这两种配置:

<!--  Clear Orders By Sessions -->
<bean id="clearExpiredSessionOrdersTask" class="com.datx.timers.ClearExpiredSessionOrdersTask" autowire="byName">
    <property name="period" value="00:02:10"/>
</bean>

<bean id="clearExpiredSessionOrdersTaskInvoker"
    class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
    <property name="targetObject" ref="clearExpiredSessionOrdersTask" />
    <property name="targetMethod" value="doTask" />
</bean>

<bean id="clearExpiredSessionOrdersTaskTimer" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask" ref="clearExpiredSessionOrdersTaskInvoker" />
    <property name="delay" value="1000" /><!-- In miliseconds -->
    <property name="period" value="130000" /><!-- In miliseconds -->
</bean>
<!--  Clear Orders By Sessions -->

这是一个正在工作的。我的班级com.datx.timers.ClearExpiredSessionOrdersTask排在第一排。

另一个bean是这样设置的:

<!-- DocumentScheduleTask -->

<bean id="documentSchaduleTask" class="com.datx.timers.DocumentSchaduleTask" autowire="byName" init-method="init">
     <property name="period" value="00:02:10"/>
</bean>

<bean id="documentSchaduleTaskInvoker"
    class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
    <property name="targetObject" ref ="documentSchaduleTask" />
    <property name="targetMethod" value="doTask" />
</bean>

<bean id="documentSchaduleTaskTimer" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask" ref="documentSchaduleTaskInvoker" />
    <property name="delay" value="1000" /><!-- In miliseconds -->
    <property name="period" value="130000" /><!-- In miliseconds -->
</bean>


<!-- DocumentScheduleTask -->

你看到相似之处了吗?第一行也是我的课。

这是我的DocumentScheduleTask课:

public class DocumentSchaduleTask{
    private String period;
    public init(){
       System.out.println("Test");
    }
    public void doTask(){
        //This method is called at a specific time
    }

    public void setPeriod(String period){
        this.period = period;
    }
    public String getPeriod(){
        return this.period;
    }
}

这些配置的其余部分是相同的。但在第二个中,period财产没有价值。并且它的init方法没有被调用。这些意味着什么?

为什么会造成这种情况?我应该去哪里寻找?你有什么不同吗?

4

1 回答 1

0

我对这种差异的一个担忧是init第二种配置中的方法。AFAIKinit在属性设置为 bean 后调用,因此您的方法中的代码可能会init清除该值。请为 DocumentSchaduleTask 添加您的 init 方法的来源。

而且,也许,当您按名称自动接线时,您的错字 Sch a duler 会导致一些问题。

于 2012-09-19T11:17:13.007 回答