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