JMX (Java Management Extensions) 提供標準化管理接口,三層架構:
// 1. 管理接口:必須以 MBean 結尾
public interface SystemConfigMBean {
// 屬性:getter/setter
int getThreadCount();
void setThreadCount(int count);
String getSchemaName();
void setSchemaName(String name);
// 操作:非 get/set 方法
String doConfig();
}
// 2. 實現類:接口名 + 實現類名
public class SystemConfig implements SystemConfigMBean {
private int threadCount = 10;
private String schemaName = "default";
@Override public void setThreadCount(int count) { this.threadCount = count; }
@Override public int getThreadCount() { return threadCount; }
@Override public void setSchemaName(String name) { this.schemaName = name; }
@Override public String getSchemaName() { return schemaName; }
@Override
public String doConfig() {
return "Threads=" + threadCount + ", Schema=" + schemaName;
}
}
public class SystemConfigManagement {
public static void main(String[] args) throws Exception {
// 1. 獲取平台 MBeanServer
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
// 2. 創建 MBean 實例
SystemConfig config = new SystemConfig(10, "default");
// 3. 定義 ObjectName:domain:type=類名
ObjectName name = new ObjectName("com.example.jmx:type=SystemConfig");
// 4. 註冊
mbs.registerMBean(config, name);
// 5. 業務循環演示動態修改效果
while (config.getThreadCount() != 0) {
TimeUnit.SECONDS.sleep(3);
System.out.println("Thread Count=" + config.getThreadCount()
+ " ::: Schema=" + config.getSchemaName());
}
}
}
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1

jconsole (JDK bin 目錄)host:portcom.example.jmx → SystemConfig → Attributes


NotificationBroadcaster 推送事件authenticate=true + ssl=truejmxremote.password.file 和 jmxremote.access.file