2017-06-14 105 views
0

我有一個非常簡單的java類,它基本上有一些代碼 - 它通過Spring調度器機制運行。有沒有辦法通過JMX開關打開或關閉Spring Scheduler任務?

我對JMX並不是很熟悉 - 不幸的是,我已經獲得了一張關於通過JMX開關打開或關閉它的票證。我一直在使用JMX,但是我看到的問題與我想要做的有些不同,所以我想我會問在這裏如果這是可行的,如果是,我該如何實現?

+0

這是一個很好的機會跟一些你一起工作的其他開發人員,看看他們是否有辦法了這一點。當然有人在你之前實施這個調度程序,並有一些方法讓你更接近你的解決方案。 – Makoto

+0

不幸的是,沒有人 - 建立這個早期階段的人都沒有了。這是一個普通的老春天調度程序,但我只想知道JMX是否有一條路徑來做到這一點。如果是這樣,有沒有人有他們推薦的資源我看? – MickeyThreeSheds

回答

0

我建議你從最簡單的解決方案開始。在任務類中創建一個私有布爾字段enabled,並在scheduled方法中檢查該字段是否設置爲true然後繼續,否則停止執行。

之後,您只需將任務bean發佈到JMX。這很簡單,只是試圖遵循慣例。下面是一個簡單的例子:

@EnableScheduling 
@SpringBootApplication 
public class So44550534Application { 

    public static void main(String[] args) { 
     SpringApplication.run(So44550534Application.class, args); 
    } 

    public interface TaskMBean { 
     void setEnabled(boolean enabled); 
    } 

    @Component 
    public static class Task implements TaskMBean { 
     private static final Logger log = LoggerFactory.getLogger(Task.class); 
     private boolean enabled = true; 

     @PostConstruct 
     private void init() throws Exception { 
      final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); 
      mBeanServer.registerMBean(this, new ObjectName(this.getClass().getSimpleName(), "name", "control")); 
     } 

     @Scheduled(fixedRate = 1000L) 
     public void run() { 
      if (enabled) { 
       log.info("Task::Running"); 
      } 
     } 

     @Override 
     public void setEnabled(boolean enabled) { 
      this.enabled = enabled; 
     } 
    } 
} 

JMX Management

相關問題