gpt4 book ai didi

java - 不要在某些机器上运行 Spring @Scheduled 任务

转载 作者:搜寻专家 更新时间:2023-11-01 01:56:55 25 4
gpt4 key购买 nike

我们的 Web 应用程序几乎没有计划任务,我们非常喜欢 Spring 的这个特性,许多人已经开始依赖它。我们有一台“试点”机器,它与生产机器共享相同的配置/数据库。由于此机器指向与生产机器相同的数据库,因此当它运行计划任务时 - 它可能会影响生产数据。有没有办法不在这台机器上运行 Spring Scheduled 任务?我们考虑过依赖机器名称,但不想在每次任务启动时都进行检查。有什么建议么?

最佳答案

使用 Spring 3.1 Profiles 这将非常容易,但这里有一种方法可以在 Spring 3.0 中实现。

在您的上下文中:

<task:annotation-driven executor="taskExecutor" scheduler="configScheduler"/>
<task:scheduler id="taskScheduler"/>
<task:executor id="taskExecutor"/>

使用 @Bean 定义 configScheduler,如果设置了系统属性 noScheduler,则使用虚拟调度程序。

@Configuration
public class SchedulerConfig {
@Resource(name="taskScheduler")
ThreadPoolTaskScheduler taskScheduler;

@Bean
ThreadPoolTaskScheduler configScheduler() {
ThreadPoolTaskScheduler scheduler =
System.getProperty("noScheduler") == null : taskScheduler ?
new ThreadPoolTaskScheduler() {
@Override public ScheduledFuture schedule(Runnable task, Trigger trigger) { return null; } // Cron
@Override public ScheduledFuture scheduleAtFixedRate(Runnable task, long period) { return null; }
@Override public ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay) { return null; }
};

return scheduler;
}
}

关于java - 不要在某些机器上运行 Spring @Scheduled 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6848965/

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