0
我有一個非常簡單的java類,它基本上有一些代碼 - 它通過Spring調度器機制運行。有沒有辦法通過JMX開關打開或關閉Spring Scheduler任務?
我對JMX並不是很熟悉 - 不幸的是,我已經獲得了一張關於通過JMX開關打開或關閉它的票證。我一直在使用JMX,但是我看到的問題與我想要做的有些不同,所以我想我會問在這裏如果這是可行的,如果是,我該如何實現?
我有一個非常簡單的java類,它基本上有一些代碼 - 它通過Spring調度器機制運行。有沒有辦法通過JMX開關打開或關閉Spring Scheduler任務?
我對JMX並不是很熟悉 - 不幸的是,我已經獲得了一張關於通過JMX開關打開或關閉它的票證。我一直在使用JMX,但是我看到的問題與我想要做的有些不同,所以我想我會問在這裏如果這是可行的,如果是,我該如何實現?
我建議你從最簡單的解決方案開始。在任務類中創建一個私有布爾字段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;
}
}
}
這是一個很好的機會跟一些你一起工作的其他開發人員,看看他們是否有辦法了這一點。當然有人在你之前實施這個調度程序,並有一些方法讓你更接近你的解決方案。 – Makoto
不幸的是,沒有人 - 建立這個早期階段的人都沒有了。這是一個普通的老春天調度程序,但我只想知道JMX是否有一條路徑來做到這一點。如果是這樣,有沒有人有他們推薦的資源我看? – MickeyThreeSheds