15

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 は正しく機能しますか? onlineTimeSchedule() が複数回呼び出された場合、同じ Bean インスタンスへの参照はここで機能しますか?

scheduledFactoryBean.setScheduledExecutorTasks(new ScheduledExecutorTask[] {onlineTimeSchedule()});
4

3 に答える 3

31

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

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

于 2011-03-20T15:18:58.920 に答える