Не запускайте задачу Spring @Scheduled на определенной машине - PullRequest
4 голосов
/ 27 июля 2011

В нашем веб-приложении мало запланированных задач, и нам так нравится эта функция Spring, что многие стали полагаться на нее.У нас есть «пилотная» машина, которая имеет ту же конфигурацию / дБ, что и машины prod.Так как эта машина указывает на тот же дБ, что и машины prod, при запуске запланированной задачи - это может повлиять на данные prod.Есть ли способ не запускать задачу Spring Scheduled на этом компьютере?Мы думали о том, чтобы полагаться на имя машины, но не хотим вводить проверку при каждом запуске задачи.Какие-либо предложения?

Ответы [ 2 ]

6 голосов
/ 28 июля 2011

С профилями Spring 3.1 это будет действительно легко, но вот способ, которым вы можете сделать это в 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;
    }
  } 
1 голос
/ 27 июля 2011

С Spring 3.1 вы получите профилей , которые могут вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...