Java 有没有办法通过JMX开关打开或关闭Spring调度程序任务?

Java 有没有办法通过JMX开关打开或关闭Spring调度程序任务?,java,spring,spring-jmx,Java,Spring,Spring Jmx,我有一个非常简单的java类,里面基本上有一些代码——它通过Spring调度机制运行 我对JMX不是很熟悉——不幸的是,我收到了一张通过JMX开关打开或关闭它的罚单。我一直在用谷歌搜索JMX,但我看到的问题与我想做的有些不同,所以我想在这里问一下这是否可行,如果可行,我该如何实现这一点?我建议您从一个最简单的解决方案开始。在task类和scheduled方法中启用一个私有布尔字段,检查该字段是否设置为true,然后继续,否则停止执行 之后,您所要做的就是将任务bean发布到JMX。这相当简单,只

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


我对JMX不是很熟悉——不幸的是,我收到了一张通过JMX开关打开或关闭它的罚单。我一直在用谷歌搜索JMX,但我看到的问题与我想做的有些不同,所以我想在这里问一下这是否可行,如果可行,我该如何实现这一点?

我建议您从一个最简单的解决方案开始。在task类和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;
        }
    }
}

这是一个与您合作的其他开发人员交谈的好机会,看看他们是否有解决方法。当然,在你之前有人已经实现了这个调度器,并且有一些方法可以让你更接近你的解决方案。不幸的是,没有——构建这个早期阶段的人都走了。不过,它是一个常规的老式spring调度程序——我只想知道JMX是否有这样做的路径。如果是这样的话,有人有他们推荐给我的资源吗?