转储弹簧启动配置
问题描述:
我们的操作人员希望在应用程序启动时将Spring启动配置(即所有属性)转储到日志文件。我认为这可以通过注释@ConfigurationProperties属性并打印它们来完成。转储弹簧启动配置
问题是,是否有更好的或内置的机制来实现这一点。
鉴于除此之外似乎还没有内置解决方案,所以我尝试着自己做。这是我想出的:
@Component
public class ConfigurationDumper {
@Autowired
public void init(Environment env){
log.info("{}",env);
}
}
这样做的挑战是,它不会打印在我的application.yml中的变量。相反,这里是我得到:
StandardServletEnvironment
{
activeProfiles=[],
defaultProfiles=[default],
propertySources=[
servletConfigInitParams,
servletContextInitParams,
systemProperties,
systemEnvironment,
random,
applicationConfig: [classpath: /application.yml]
]
}
我怎样才能解决这个问题,从而已经加载,并且打印所有属性?
答
如果使用actuator,env
endpoint会给你所有ConfigurableEnvironment
设置的配置属性和configprops
会给你的@ConfigurationProperties
名单,但没有在日志中。
看看在source code这env
端点,可能是它会给你的,你怎么能得到所有你感兴趣的性质的想法。
答
没有内置的机制,它真的取决于“所有属性”的含义。你只想要你写的或者你想要的所有属性(包括默认值)。
对于前者,您可以轻松收听ApplicationEnvironmentPreparedEvent
并记录您感兴趣的财产来源。对于后者,/configprops
确实是一个更好/完整的输出。