2011-07-27 53 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

相關問題