有没有办法通过JMX开关打开或关闭Spring Scheduler任务?

时间:2017-06-14 16:52:09

标签: java spring spring-jmx

我有一个非常简单的java类,它基本上有一些代码 - 它通过Spring调度程序机制运行。

我对JMX不是很熟悉 - 不幸的是,我获得了一张与通过JMX开关打开或关闭它相关的票。我一直在谷歌搜索JMX,但我看到的问题与我想做的有些不同,所以我想我会问这里是否可行,如果是,我怎么能实现呢?

1 个答案:

答案 0 :(得分: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