我真的很想在Sping Boot 中使用YAML config,因为我发现它很有可读性,而且用一个文件来显示我的不同配置文件中哪些属性是活动的。不幸的是,我发现在application.yml
中设置属性可能相当脆弱。
像使用制表符而不是空格这样的事情会导致属性不存在(据我所知没有警告),而且我经常发现我的活动配置文件没有被设置,这是由于我的YAML出现了一些未知的问题。
所以我想知道是否有任何钩子可以让我获得当前活动的配置文件和属性,这样我就可以记录它们。
类似地,如果application.yml
包含错误,是否有方法导致启动失败?或者是我自己验证YAML的方法,这样我就可以终止启动进程。
6条答案
按热度按时间slmsl1lt1#
除其他答案外:记录上下文刷新事件的活动属性。
java 8
Kotlin
输出如:
okxuctiv2#
我也遇到过同样的问题,我希望有一个调试标志,告诉概要文件处理系统输出一些有用的日志记录。一种可能的方法是为您的应用程序上下文注册一个事件侦听器,并从环境中打印概要文件。我自己还没有尝试过这种方法,所以您的里程可能会有所不同。我认为可能类似于下面概述的内容:
How to add a hook to the application context initialization event?
然后你会在你的听众中这样做:
也许值得一试。另一种可能的方法是在需要打印配置文件的代码中声明要注入的环境。即:
iq0todco3#
Actuator /env服务显示属性,但不显示哪个属性值实际上是活动的。
因此,您将在多个源中具有相同的属性和不同的值。
下面的代码段在启动时打印活动的应用程序属性值:
pcww981p4#
如果
application.yml
包含错误,它将导致启动失败。我猜这取决于你对“错误”的理解。当然,如果YAML格式不正确,它将失败。同样,如果你设置了标记为ignoreInvalidFields=true
的@ConfigurationProperties
,或者如果你设置了一个无法转换的值,这是一个相当广泛的错误。活动配置文件可能会在启动时被
Environment
实现记录(但无论如何,您可以轻松地获取并将其记录在启动器代码中-我认为Environment
的toString()
将列出活动配置文件)如果添加Actuator,活动配置文件(以及更多)也可以在/env端点中获得。1bqhqjot5#
如果您想在初始化bean/应用程序之前获得活动配置文件,我发现的唯一方法是在SpringBootServletInitializer/SpringApplication中注册一个自定义Banner(即JHipster应用程序中的ApplicationWebXml)。
例如:
yh2wf1be6#
如果你想在你的spring Boot 应用程序启动期间从application.yml文件中记录一些活动的配置值,你必须像这样使用spring farmenwork中的ApplicationReadyListener类: