質問

Spring 3.0の時点で、Scheduledtimertaskは非推奨であり、org.springframework.scheduling.concurrentにアップグレードする方法を理解できません。

    <bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
        <property name="scheduledTimerTasks">
            <list>
                 <ref bean="onlineTimeSchedule" />
            </list>
            </property>
    </bean>

    <bean id="onlineTimeSchedule" class="org.springframework.scheduling.timer.ScheduledTimerTask">
        <property name="timerTask" class="com.example.OnlineTimerTask" />
        </property>
        <property name="period" value="60000" />
        <property name="delay" value="1000" />
    </bean>

OnlinetimertaskがJava.util.timertaskを拡張する場所。それは毎分出版社にメッセージを公開する簡単なタスクです。ドキュメントをチェックしましたが、何もありません。同時パッケージからどの方法を使用し、どれが最適か理解できません。

また、このXMLをJavaの@Beanに変えたいと思います。

編集: そこで、代わりに@Beanと@ConfigurationでXMLを実装しようとしましたが、これが私が得たものです。

@Configuration
public class ContextConfiguration {
    @Bean
    public ScheduledExecutorFactoryBean scheduledExecutorFactoryBean() {
        ScheduledExecutorFactoryBean scheduledFactoryBean = new ScheduledExecutorFactoryBean();
        scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});

        return scheduledFactoryBean;
    }

    @Bean
    public ScheduledExecutorTask onlineTimeSchedule() {
        ScheduledExecutorTask scheduledTask = new ScheduledExecutorTask();
        scheduledTask.setDelay(1000);
        scheduledTask.setPeriod(60000);
        scheduledTask.setRunnable(new OnlineTimerTask());

        return scheduledTask;
    }
}

上記のコードはXMLの正しい代替品になりますか?私の場合、SetScheduleDexecutortasksは適切に機能しますか? OnlinetimesSchedule()が複数回呼び出された場合、同じBeanインスタンスを参照することは、ここで機能することを意味しますか?

scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});
役に立ちましたか?

解決

使用する org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean 代わりに org.springframework.scheduling.timer.TimerFactoryBean そして使用します org.springframework.scheduling.concurrent.ScheduledExecutorTask 代わりに org.springframework.scheduling.timer.ScheduledTimerTask. 。必要に応じてプロパティ名と値を調整する必要がありますが、それはかなり自明であるはずです。

オプションで、リファクタリングできます com.example.OnlineTimerTask 拡張しないように java.util.TimeTask ScheduleDtimertaskは実行可能なもののみを必要とするためです。

他のヒント

スプリング4構成-3.2.xから4.6.xへの春の移行後に動作する構成以下

<bean id="schedulerTask"
        class="org.springframework.scheduling.support.MethodInvokingRunnable">
        <property name="targetObject" ref="springJmsListnerContainer" />
        <property name="targetMethod" value="execute" />
    </bean>
    <bean id="timerTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
        <property name="runnable" ref="schedulerTask" />
        <property name="delay" value="100" />
        <property name="period" value="60000" />
    </bean>
    <bean class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
        <property name="scheduledExecutorTasks">
            <list>
                <ref bean="timerTask" />
            </list>
        </property>
    </bean>

答えは - 1つの「実行可能」フィールドを追加します

 <bean id="scheduledExecutorTask" 
    class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
    <!-- wait 10 milli seconds before starting repeated execution -->
    <property name="delay">
        <value>10</value>
    </property>
    <!-- run every 1 second -->
    <property name="period">
        <value>1000</value>
    </property>
    <property name="runnable">
        <ref bean="checkInvokingTask"/>
    </property>
</bean>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top