gpt4 book ai didi

java - spring 计划任务 : from XML to annotation

转载 作者:搜寻专家 更新时间:2023-11-01 02:38:15 24 4
gpt4 key购买 nike

在我们的 Spring 网络应用程序中,我们正在从基于 XML 的配置转向基于注解的配置。

我被这个 XML 定义的计划任务困住了

<task:scheduled-tasks scheduler="cacheScheduler">
<task:scheduled ref="currencyExchangeRateTask" method="cacheCurrencyExchangeRates" cron="0 0 8,20 * * *" />
</task:scheduled-tasks>

我们的网络应用程序中有多个调度程序。并且这个任务需要在id为cacheScheduler的调度器上执行。

我现在有以下注释

@Scheduled(cron = "0 0 8,20 * * *")
public void cacheCurrencyExchangeRates() {
...
}

这是在默认调度程序上执行的。

如果没有 XML 配置,如何解决这个问题?

最佳答案

你不能通过 @Scheduled 做到这一点直接地。它不提供任何注释成员来指定 bean 引用名称。

相反,您必须使用 SchedulingConfigurer .定义一个 @Configuration类(class)。用 @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());
}
}

所有 @Scheduled通过此发现的方法 @Configuration类现在将使用 TaskScheduler内定义。

如果你需要不同的@Scheduled使用不同的方法 TaskScheduler实例,你需要不同的 @Configuration类,类似于需要不同的 <task:scheduled-tasks .../>元素。

关于java - spring 计划任务 : from XML to annotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com