spring jmx_JMX和Spring –第1部分

spring jmx

这是三篇文章的第一篇,这三篇文章将展示如何通过JMX支持为Spring应用程序赋能。

Maven配置

这是用于设置此示例代码的Maven pom.xml:



<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>uk.co.jemos.experiments.jmx</groupId><artifactId>jemos-jmx-experiments</artifactId><version>0.0.1-SNAPSHOT</version><name>jemos-jmx-experiments</name><description>Jemos JMX Experiments</description><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.0.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.0.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jmx</artifactId><version>2.0.8</version><scope>compile</scope></dependency>        <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>3.0.5.RELEASE</version><type>jar</type><scope>test</scope></dependency></dependencies>
</project>

弹簧配置

Spring配置非常简单:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"><context:property-placeholder location="classpath:jemos-jmx.properties" /><bean id="rmiRegistry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"><property name="port" value="${jemos.jmx.rmi.port}" /></bean><bean id="jemosJmxServer" class="org.springframework.jmx.support.ConnectorServerFactoryBean"depends-on="rmiRegistry" ><property name="objectName" value="connector:name=rmi" /><property name="serviceUrl"value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jemos.jmx.rmi.port}/jemosJmxConnector" /><property name="environment"><!-- the following is only valid when the sun jmx implementation is used --><map><entry key="jmx.remote.x.password.file" value="${user.home}/.secure/jmxremote.password" /><entry key="jmx.remote.x.access.file" value="${user.home}/.secure/jmxremote.access" /></map></property></bean></beans>

此配置虽然很简单,但可以满足以下所有要求:

  • 从您的Spring应用程序上下文中启动JMX服务器
  • 通过远程RMI URL公开对JMX服务器的访问
  • 通过身份验证和授权保护对JMX服务器的访问

关于上述配置的几点注意事项:

  • 您想外部化一些配置信息,例如RMI注册表端口和应用程序运行所在的主机。 尽管我将RMI注册表端口外部化为类路径中的属性文件,但我将“ localhost”保留为主机名。 在实际的生产环境中,尤其是当您想水平扩展应用程序(例如,将其部署在不同的服务器上)时,远程URL的服务器部分也应该外部化。
  • 因为我们要公开一个远程RMI URL,所以为了使JMX服务器公开到RMI注册表,如果尚未启动一个RMI注册表,则需要启动它。 这是通过声明RmiRegistryFactoryBean发生的。 启动注册表的端口必须与公开的URL相同。
  • 上面的配置未启用基于注释的MBean支持。 这种配置将成为我下一篇文章的主题,在该文章中,我将展示如何编写一个简单的MBean来更改基于Log4j的应用程序的日志记录级别。 通过身份验证和授权保护对JMX服务器的访问

在以上配置中,您可能已经注意到以下部分:

<property name="environment"><!-- the following is only valid when the sun jmx implementation is used --><map><entry key="jmx.remote.x.password.file" value="${user.home}/.secure/jmxremote.password" /><entry key="jmx.remote.x.access.file" value="${user.home}/.secure/jmxremote.access" /></map></property>

上面的代码段声明的是两个文件的位置,一个用于授权,一个用于认证。 我决定将此类文件放在〜/ .secure下,但该位置最终取决于您。 这些文件的内容很简单:

JMX访问文件

jemosAdmin读写

上面的文件包含一个用户名(jemosAdmin)及其角色(readwrite)。

JMX密码文件

在JMX密码文件中,声明用户及其密码:

jemosAdmin安全

这些信息到位后,您可以启动JMX服务器,然后通过jconsole或jvisualvm(如果使用的是JDK6或更高版本)访问它。

一旦通过身份验证,RMI连接器就可以作为Bean实际使用,所有Oracle的本地MBean一样。

在我的下一篇文章中,我将展示如何编写一个简单的Logging MBean服务的代码,该服务可在运行时用于更改包(及其所有子包)的日志记录级别。 这项服务带来了增加正常运行时间的优势,并有助于对应用程序进行故障排除。

继续第2部分 。

参考: JMX和Spring –来自我们的JCG合作伙伴 Marco Tedone的第1部分 ,位于Marco Tedone的博客博客中。


翻译自: https://www.javacodegeeks.com/2012/07/jmx-and-spring-part-1.html

spring jmx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

守口住嘴

守口 祸从口出 病从口入 住嘴 嘴能成事 亦能坏事 守口 祸从口出 病从口入 住嘴 嘴能成事 亦能坏事 转载于:https://www.cnblogs.com/fangtengfei/p/8416073.html

JAVA有percentile函数吗_Python numpy.percentile函数方法的使用

numpy.percentilenumpy.percentile(a, q, axisNone, outNone, overwrite_inputFalse, interpolationlinear, keepdimsFalse) [source]计算沿指定轴的数据的第q个百分位数。返回数组元素的第q个百分点。参数 &#xff1a;a &#xff1a;array_like输入数组或可以转换为数组的…

C代码的运行速度总是比Java快,对吧? 错误!

因此&#xff0c;我们都知道&#xff0c;Java解释缓慢且C的编译和优化运行速度非常快。 您可能知道&#xff0c;图片截然不同。 TL; DR Java适用于星座&#xff0c;它的速度更快&#xff0c;在JIT上可以执行内联&#xff0c;因为所有方法/功能都是可见的&#xff0c;而C编译器…

JS制作日历小事件和数码时钟--JavaScript实例集锦(初学)

运用JS的innerHTML&#xff0c;和for循环实现日历小部件内容和日期的转换。 <!DOCTYPE html> <html> <head><title>日历小部件</title><style type"text/css">*{padding: 0;margin:0;}.tab{width:220px;background: #ccc;height…

Django-认证系统

知识预览 COOKIE 与 SESSION用户认证 回到顶部COOKIE 与 SESSION 概念 cookie不属于http协议范围&#xff0c;由于http协议无法保持状态&#xff0c;但实际情况&#xff0c;我们却又需要“保持状态”&#xff0c;因此cookie就是在这样一个场景下诞生。 cookie的工作原理是&…

jpa 查询 列表_终极JPA查询和技巧列表–第3部分

jpa 查询 列表在阅读第三部分之前&#xff0c;请记住本系列的第一部分和第二部分 JPA&#xff1a;通过查询创建对象 JPA允许我们使用所需的值在查询内创建对象&#xff1a; package com.model;public class PersonDogAmountReport {private int dogAmount;private Person per…

java 限制文件大小_java上传文件大小限制

win系统下解决ASP上传文件大小限制200K_电脑基础知识_IT/计算机_专业资料。win系统下解决ASP上传文件大小限制200K 解决ASP 上传文件大小限制 200K win2003 系统下的 ......介绍 上传 // 新建一个 SmartUpload 对象 SmartUpload su new SmartUpload(); // 上传初始化 su.initi…

java 数组的get set_java.lang.reflect.Array.setBoolean()方法

java.lang.reflect.Array.setBoolean(Object array, int index, boolean value)方法将指定的数组对象的索引组件的值设置为指定的布尔值。声明以下是java.lang.reflect.Array.set(Object array, int index, boolean value)方法的声明。public static void setBoolean(Object ar…

poj3984 迷宫问题 bfs 最短路 广搜

迷宫问题Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 27913 Accepted: 16091Description定义一个二维数组&#xff1a; int maze[5][5] {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫&#xff0c;其中的1表示墙壁…

使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行

红帽公司最近发布了一个微服务集成工具包&#xff0c;用于在OpenShift v3的Docker和Kubernetes环境中运行我们的微服务。 为了帮助人们更好地理解这一点&#xff0c;我将Rider Auto应用程序迁移到一组微服务中&#xff0c;该应用程序已经存在了一段时间&#xff0c;该应用程序用…

python之字符串连接

join 就属于技巧了&#xff0c;利用字符串的函数 join 。这个函数接受一个列表&#xff0c;然后用字符串依次连接列表中每一个元素&#xff1a; str_list [Pyt, hon] a print a.join(str_list)步骤&#xff1a; 1、建立一个列表 2、利用 join() 原文链接  转载于:https://…

JAVA取钱多线程实验_JAVA多线程----用--取钱问题2

在该示例代码中&#xff0c;TestAccount类是测试类&#xff0c;主要实现创建帐户Account类的对象&#xff0c;以及启动学生线程StudentThread和启动家长线程GenearchThread。在StudentThread线程中&#xff0c;执行的功能是每隔2秒中取一次钱&#xff0c;每次取50元。在Genearc…

Spark1——介绍

1、Spark是什么 Spark是一个用来实现快速而通用的集群计算的平台。 2、Spark是一个大一统的软件栈 Spark项目包含多个紧密集成的组件。首先Spark的核心是一个对由很多计算任务组成的、运行在多个工作机器或者是一个计算集群上的应用进行调度、分发以及监控的计算引擎。 Spark的…

java按输入顺序输出_java 输入3个数a,b,c,按大小顺序输出的实例讲解

java 输入3个数a,b,c&#xff0c;按大小顺序输出的实例讲解题目&#xff1a;输入3个数a,b,c&#xff0c;按大小顺序输出。代码&#xff1a;import java.util.Scanner;public class lianxi34 {public static void main(String[] args) {Scanner s new Scanner(System.in);Syste…

Java 8中HotSpot选项的改进文档

Oracle的 Java 8 的HotSpot实现中引入的一些小但受欢迎的功能之一是在启动器的文档中添加了许多常见的HotSpot Java启动器 &#xff08; java &#xff09;选项/标志。 过去&#xff0c;即使是对某些相当常见的HotSpot JVM选项也感兴趣的开发人员 &#xff0c;不得不潜在地寻找…

sql server数据库课程设计分析

课题&#xff1a;能源管理收费系统 系统功能的基本要求&#xff1a; &#xff08;1&#xff09;用户基本信息的录入&#xff1a;包括用户的单位、部门、姓名、联系电话、住址 &#xff1b; &#xff08;2&#xff09;用户水、电、气数据的录入&#xff08;每个月的数据的录入&a…

Springboot 项目启动后执行某些自定义代码

Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种“开机启动”某些方法的方式&#xff1a;ApplicationRunner和CommandLineRunner。这两种方法提供的目的是为了满足&#xff0c;在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和Com…

android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...

Android中的传递有两个方法&#xff0c;一个是Serializable&#xff0c;另一个是Parcelable。Serializable是J2SE本身就支持的。而Parcelable是Android所特有的。二者的使用场景和区别&#xff1a;1)在使用内存的时候&#xff0c;Parcelable比Serializable性能高&#xff0c;所…

[BZOJ4537][Hnoi2016]最小公倍数 奇怪的分块+可撤销并查集

4537: [Hnoi2016]最小公倍数 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1474 Solved: 521[Submit][Status][Discuss]Description 给定一张N个顶点M条边的无向图(顶点编号为1,2,…,n)&#xff0c;每条边上带有权值。所有权值都可以分解成2^a*3^b的形式。现在有q个询问&…

全新资源素材站源码 功能齐备 界面干净整洁

源码介绍 简单安装说明&#xff1a; 1、整站程序上传后台 2、然后导入数据库文件到数据库&#xff0c; 3、修改conf里面的conf的数据库名字及密码 4、配置伪静态 规则&#xff1a; location ~* \.(htm)$ { rewrite "^(.*)/(.?).htm(.*?)$" $1/index.php?$2…