从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()});

最佳答案

使用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只需要一个可运行的即可。

09-28 07:41