不要在某台机器上运行Spring @Scheduled任务

我们的网络应用程序几乎没有计划任务,我们非常喜欢Spring的这个function,许多人已经开始依赖它了。 我们有一台’试用’机器,与prod机器共享相同的配置/ db。 由于此机器指向与prod机器相同的db,因此当它运行计划任务时 – 它可能会影响prod数据。 有没有办法不在这台机器上运行Spring Scheduled任务? 我们考虑过依赖机器名称,但是每次任务开始时都不想引入检查。 有什么建议么?

使用Spring 3.1 Profiles它会非常简单,但是这里有一种方法可以在Spring 3.0中实现。

在您的背景下:

   

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

 @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; } } 

使用Spring 3.1,您将获得可能对您有所帮助的配置文件 。