2011-07-27 51 views
4

我们的网络应用程序有几个计划任务,我们非常喜欢Spring的这个功能,许多人已经开始依赖它。我们有一个'pilot'机器,它与prod机器共享相同的配置/分贝。由于该机器与prod机器指向相同的db,所以当它运行计划任务时,它可能会影响prod数据。有没有办法在这台机器上运行Spring Scheduled任务?我们考虑依赖机器名称,但不想在每次任务开始时引入检查。有什么建议么?不要在某些机器上运行Spring @Scheduled任务

回答

1

使用Spring 3.1,你会得到profiles,这可能会帮助你。

6

随着Spring 3.1的配置文件,它将非常容易,但这里有一种方法可以在Spring 3.0中实现。

在您的上下文:

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

使用@Bean如果系统属性noScheduler设置来定义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; 
    } 
    } 
+0

谢谢@ericacm。非常有帮助。 – sumit

+0

没问题,如果这对你有用,你能接受吗?谢谢, – sourcedelica

相关问题