spring-boot jmx jconsole 配置

spring-boot 提供了Actuator方式的来获取spring-boot状态信息; 不过今天我介绍jmx的方式

为何要使用jmx, 引用某呼的回答

1、程序初哥一般是写死在程序中,到要改变的时候就去修改代码,然后重新编译发布。

2、程序熟手则配置在文件中(JAVA一般都是properties文件),到要改变的时候只要修改配置文件,但还是必须重启系统,以便读取配置文件里最新的值。

3、程序好手则会写一段代码,把配置值缓存起来,系统在获取的时候,先看看配置文件有没有改动,如有改动则重新从配置里读取,否则从缓存里读取。

4、程序高手则懂得物为我所用,用JMX把需要配置的属性集中在一个类中,然后写一个MBean,再进行相关配置。另外JMX还提供了一个工具页,以方便我们对参数值进行修改。

作者:郭无心

链接:https://www.zhihu.com/question/36688387/answer/68667704

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



感觉挺装逼的, 于是就花点时间整理了; 下面是已注解的方式使用jmx, 无需引入其他jar包;

1、第一步可以定义自己的MBean来管理自己想管理的数据;

@ManagedResource(objectName= "bean:name=xxx" , description= "描述" ) @Component

public class TestFactory {

..................

@ManagedOperation

public void flush() {

logger.warn("刷新了支付配置缓存");

..................

}

以上是代码; 如果没有自己的MBean,可以直接省略这一步;

2、第二步在spring里配置jmx服务信息;

@Bean //注册rmi

public RmiRegistryFactoryBeanrmiRegistry() {

final RmiRegistryFactoryBean rmiRegistryFactoryBean =new RmiRegistryFactoryBean();

    rmiRegistryFactoryBean.setPort(8896); //链接端口

    rmiRegistryFactoryBean.setAlwaysCreate(true);

    return rmiRegistryFactoryBean;

}

@Bean

@DependsOn("rmiRegistry") //声明链接

public ConnectorServerFactoryBeanconnectorServerFactoryBean()throws Exception {

final ConnectorServerFactoryBean connectorServerFactoryBean =new ConnectorServerFactoryBean();

    connectorServerFactoryBean.setObjectName("connector:name=rmi");

    String serviceUrl = String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", "127.0.0.1", 8896, "127.0.0.1", 8896);

    connectorServerFactoryBean.setServiceUrl(serviceUrl);

    logger.info("ConnectorServerFactoryBean create success !! url:{}", serviceUrl);

    return connectorServerFactoryBean;

}

这样,在spring-boot中的配置可以说已经完成了;

3、配置启动参数

-Djava.rmi.server.hostname=127.0.0.1

-Dcom.sun.management.jmxremote.port=8899

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=true #如果不想用认证就设置为false

4、如果第三步配置了需要认证; 默认的认证文件是在JAVA_HOME/jre/lib/management/jmxremote.access和 JAVA_HOME/jre/lib/management/jmxremote.password(有个template文件,重命名这个文件后把默认的用户和密码去掉注释就可以)由于jmx要求jmxremote.password只能有读取权限;所以需要修改文件的权限;linux环境下执行 chmod 600 jmxremote.access; windows按如下操作;

右键文件,选择->属性->安全->高级->更改权限  把下面的权限勾选调


5、使用jconsole链接 ,打开jconsole, 在远程进程中输入Url和用户名密码; 如下


6、因为禁用了ssl, 所以会提示不安全的链接; 链接成功后效果如下;


jconsole界面

jconsole中,能找到自己定义的MBean以及Tomcat, spring自己的MBean; MBean里有属性信息; 操作是指能直接调用MBean里的方法;通知是MBean之间信息交流的接口;

至此,jconsole监控spring-boot配置完成;

你可能感兴趣的:(spring-boot jmx jconsole 配置)