【问题标题】:Do not run Spring @Scheduled task on certain machine不要在某些机器上运行 Spring @Scheduled 任务
【发布时间】:2011-10-14 12:08:49
【问题描述】:

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

【问题讨论】:

    标签: java spring build-process scheduled-tasks


    【解决方案1】:

    使用 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;
        }
      } 
    

    【讨论】:

      【解决方案2】:

      在 Spring 3.1 中,您将获得 profiles,这可能会对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 2020-09-23
        • 1970-01-01
        相关资源
        最近更新 更多