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

标签 java spring spring-jmx

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

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

最佳答案

我建议您从最简单的解决方案开始。在任务类和scheduled方法中创建一个私有(private) boolean 字段enabled,检查该字段是否设置为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

关于java - 有没有办法通过 JMX 开关打开或关闭 Spring Scheduler 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550534/

相关文章:

java - 重新发布不起作用(静态资源)

java - 如何在 Spring Data JPA 中实现与额外列的多对多关系?

带有 Hibernate 的 Spring Boot - 从另一个项目 Autowiring 存储库

java - 当使用注释声明 bean 时,JMX MBean 不会显示在 JConsole 上

java - 设置唯一的 bean 名称 javax.management.InstanceAlreadyExistsException

java - 检查 o(n) 中数组左侧的总和是否等于数组右侧的总和

java - "+="运算符和 int 长用法

java - Collections.nCopies() 与 For 循环初始化

java - @ResponseBody 导致 EofException

java - 关于在下面的应用程序中添加 spring jmx 功能