我想让所有属性占位符及其运行的Spring(Boot)应用程序的已解析值可用于进程监视。在第一步中,只需将它们写入日志或创建一个“已解决的”属性即可。文件类似于application.pid文件。 应考虑使用属性占位符(隐式/显式)的所有属性。
动机:在操作过程中通常很难知道已解析属性的值。系统属性或命令行参数是"可见"但是例如代码中隐藏的默认值(如@Value("${timeout:30000}")
)很难找到。我希望能够回答这个问题"正在运行的应用程序的配置如何?"我可以在所有弹簧应用程序中使用的通用方法。
我知道Spring Boot Actuator / configprops端点,但这只包括@ConfigurationProperties
。我想获得一个使用占位符的所有属性的列表。
答案 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}