java - 如何将 JMX 参数传递到 Spring 应用程序上下文

标签 java spring

我想使用 Spring IoC 来连接我的服务 Bean。

在某些项目中,配置参数来自属性文件。

我希望使用与其他项目最相似的方法来实现这个新项目,这样 Spring XML 应用程序上下文就不会意识到配置参数现在来自 JMX 而不是文件系统中的属性文件。

我从 JBoss 中的 EJB 获取 JMX 配置参数,但我真的很想实现一个独立于服务器的解决方案,我可以在没有 JBoss 甚至没有 EJB 的情况下使用该解决方案。

我的想法示例:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml");

applicationContext.replacePropertiesConfigurer( myCustomPropertiesFromJMX );
applicationContext.reloadApplicationContext();

SomeBean aBean = (SomeBean) applicationContext.getBean("someBean");

当然,第二行和第三行是无效的,但它们是我想象我想要的解决方案的方式。

亲切的问候。

最佳答案

感谢Errandir寻求指导。

感谢Evgeniy Dorofeev也感谢他在另一个question中的回应也问了同样的问题。

适合我需要的最终代码如下:

在不工厂化 Spring beans 的情况下创建上下文(构造函数的第二个参数false):

ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"classpath:main-applicationContext.xml"}, false);

创建属性,无论它们来自何处:

Properties jmxConfig = new Properties();
jmxConfig.setProperty("parameterX", valueX);

以编程方式创建 PropertiesPlaceholderConfigurer 并绑定(bind)我们刚刚创建的先前自定义属性,并将其绑定(bind)到应用程序上下文:

PropertySourcesPlaceholderConfigurer mapPropertySource = new PropertySourcesPlaceholderConfigurer();
mapPropertySource.setProperties(jmxConfig);
applicationContext.addBeanFactoryPostProcessor(mapPropertySource);

最后,它已配置完毕,现在可以创建实例并获取它们了:

applicationContext.refresh();

MyService myService = applicationContext.getBean("myService", MyService.class);

关于java - 如何将 JMX 参数传递到 Spring 应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323618/

相关文章:

java - java中使用SimpleDateFormat进行时间格式化

java - 在 Groovy 中使用递归嵌套映射合并映射

jquery - 在 jqGrid 子网格中获取自定义 rowId

java - 如何使用模型映射器将 2 个类映射到 Dto

java - 如何编写切面来满足不同的对象和方法参数

java - 使用 Exception 类或 FileNotFoundException 类捕获异常的区别

java - 读取文件并将数据计数插入JTable

java - 如何将 API 访问信息输出到记录器文件中?

java - Spring mvc 绑定(bind)错误国际化

java - 为什么我不能使用 Vector 在指定索引处插入元素?