获取Spring属性占位符及其已解析值的列表

时间:2016-09-05 12:01:46

标签: java spring spring-boot

我想让所有属性占位符及其运行的Spring(Boot)应用程序的已解析值可用于进程监视。在第一步中,只需将它们写入日志或创建一个“已解决的”属性即可。文件类似于application.pid文件。 应考虑使用属性占位符(隐式/显式)的所有属性。

动机:在操作过程中通常很难知道已解析属性的值。系统属性或命令行参数是"可见"但是例如代码中隐藏的默认值(如@Value("${timeout:30000}"))很难找到。我希望能够回答这个问题"正在运行的应用程序的配置如何?"我可以在所有弹簧应用程序中使用的通用方法。

我知道Spring Boot Actuator / configprops端点,但这只包括@ConfigurationProperties。我想获得一个使用占位符的所有属性的列表。

这个要求似乎并不新鲜(请参阅herehere),但我想知道现在是否有适当的(启动式)方式。

2 个答案:

答案 0 :(得分:3)

(目前)无法在Environment抽象中获取所有属性。这是有意的,可以阅读here。这也是为什么不可能获得用于解决的所有值的原因。

在运行时记录值和分辨率,告知在运行时从哪里解析了哪个键。但是每次使用StringValueResolver时,记录都非常冗长并记录。

您可以通过提供自定义的PropertySourcesPlaceholderConfigurer来获得部分结果,该自定义PropertySourcesPlaceholderConfigurer维护已解析的键/值对的集合。但并非所有解决方案都使用StringValueResolver某些解决方案直接使用绕过PropertySourcesPlaceholderConfigurer的{​​{1}}实施。

答案 1 :(得分:0)

它不能满足您的所有需求(即:所有文件中的属性,默认值,应用程序参数等)。 我仍然会为其他读者/未来参考保留答案。

Spring Boot的执行器/env端点

您可以使用/env端点。它列出了一堆东西,但它还包括application.properties的内容(接近结尾):

applicationConfig: [classpath:/application.properties]={myproperty=blah, server.port=8080}