JMX in spring 配置

JConsole中的连接:简单的localhost:1099 或 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

服务端配置

1. 可以在Java命令行里定义, 如:

-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.port=1099
 

在生产环境,最好再带上密码控制:

-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.password.file=conf\jmxremote.password -Dcom.sun.management.jmxremote.access.file=conf\jmxremote.access
 

 

jmxremote.password与jmxremote.access文件参见showcase/assembly/conf/production目录

         安全原因这两个文件要求只读,在windows下可用此命令设置  cacls jmxremote.password /P your_login_name:R

 

2. 在spring的ApplicationContext中定义

使用MBean方式见ServerConfigMBean与ServerConfig,定义符合XXXMBean接口与XXX实现命名规则的类即可。

        使用annotation方式见TraceMBean,Log4jMBean与QueueHolder:

 

@ManagedResource(objectName = "SpringSide:type=Log4jManagement,name=log4jManagement", description = "Log4j Management Bean")
public class Log4jMBean {	       @ManagedAttribute(description = "Logging level of the root logger")
	public String getRootLoggerLevel() {
		Logger root = Logger.getRootLogger();
		return root.getLevel().toString();
	}  	@ManagedOperation(description = "Set the new logging level to the logger")
	@ManagedOperationParameters( { @ManagedOperationParameter(name = "loggerName", description = "Logger name"),
			@ManagedOperationParameter(name = "newlevel", description = "New level") })
	public void setLoggerLevel(String loggerName, String newLevel) {
		Logger logger = Logger.getLogger(loggerName);
		Level level = Level.toLevel(newLevel);
		logger.setLevel(level);
	}

 

 

使用了Spring的自动导出  <context:mbean-export default-domain="Showcase" registration="replaceExisting" />,快速导出所有用annotation标注的MBean. 另外所有其中接口与实现的命名规则需符合默认的 XXXMBean(接口) 与 XXX(实现)的也被被默认导出.

        使用用annotation可以随意自定义MBean的命名空间,而使用MBean定义时则默认为到Custom, 如果需要改变,则需要在applicationContext.xml放弃快速的JMX namespace方式,改为较长的方式,在xml中定义object name.

 

 

 

你可能感兴趣的:(spring,log4j,bean,Access,sun)