1

似たような豆が2つあります。で呼び出されるように設定されていScheduledTimerTaskます。

しかし、一方は正常に機能していますが、もう一方はそうではありません! これらの 2 つの構成は次のとおりです。

<!--  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;
    }
}

これらの構成の残りの部分は同じです。しかし、2 番目のものでは、periodプロパティは値を取りません。そして、そのinitメソッドは呼び出されません。これらは何を意味していますか?

なぜこれを引き起こしたのでしょうか?どこを探せばいいですか?違いはありますか?

4

1 に答える 1

0

この違いに関する私の懸念の 1 つinitは、2 番目の構成の方法です。AFAIKinitは、プロパティが Bean に設定された後に呼び出されるため、メソッド内のコードinitがその値をクリアする可能性があります。DocumentSchaduleTask の init メソッドのソースを追加してください。

そして、タイプミス Sch a duler は、名前で自動配線するときにいくつかの問題を引き起こす可能性があります。

于 2012-09-19T11:17:13.007 に答える