Ste*_*yts 4 java spring spring-annotations
在我们的 Spring Web 应用程序中,我们正在从基于 XML 的配置转向基于注释的配置。
我被这个 XML 定义的计划任务所困扰
<task:scheduled-tasks scheduler="cacheScheduler">
<task:scheduled ref="currencyExchangeRateTask" method="cacheCurrencyExchangeRates" cron="0 0 8,20 * * *" />
</task:scheduled-tasks>
Run Code Online (Sandbox Code Playgroud)
我们的网络应用程序中有多个调度程序。而这个任务需要在 id 的调度器上执行cacheScheduler。
我现在有以下注释
@Scheduled(cron = "0 0 8,20 * * *")
public void cacheCurrencyExchangeRates() {
...
}
Run Code Online (Sandbox Code Playgroud)
这是在默认调度程序上执行的。
如果没有 XML 配置,如何解决这个问题?
你不能@Scheduled直接通过。它不提供任何注释成员来指定 bean 引用名称。
相反,您必须使用SchedulingConfigurer. 定义一个@Configuration类。使用@EnableScheduling和@ComponentScan为具有带注释方法的组件类型的包进行注释@Scheduled。然后让班级实施SchedulingConfigurer。
ScheduledTaskRegistrar通过其提供的方法configureTasks可以让您设置任务计划程序。
例如:
@Configuration
@ComponentScan("com.example.tasks")
@EnableScheduling
class Tasks implements SchedulingConfigurer {
@Bean
public TaskScheduler cacheScheduler() {
return new ThreadPoolTaskScheduler();
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setTaskScheduler(cacheScheduler());
}
}
Run Code Online (Sandbox Code Playgroud)
@Scheduled通过此类发现的所有方法@Configuration现在都将使用TaskScheduler其中定义的方法。
如果您需要不同的@Scheduled方法来使用不同的TaskScheduler实例,则需要不同的@Configuration类,类似于需要不同的<task:scheduled-tasks .../>元素。
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |