2017-06-14 84 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

相关问题