无法在 springboot 中填充系统环境值 application.properties

Unable to populate system environment values in springboot application.properties

我正在尝试访问 application.properties 文件中的环境值。环境变量已经设置在我的系统变量中(Windows环境变量),比如SPRING_DATASOURCE_USERNAME。但是,当我尝试使用 application.properties 文件访问该变量时:

spring.datasource.username=${SPRING_DATASOURCE_USERNAME}

该值未被填充。相反,我得到一个错误:

2020-04-24 15:08:29.620 WARN 9892 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata : FATAL: password authentication failed for user "${SPRING_DATASOURCE_USERNAME}"

就好像 ${...} 完全作为字符串传递一样。我是初学者,所以如果我在做任何错误,请指出错误。到目前为止,我无法从此处发布的类似问题的解决方案中找到我的错误。

注意:数据库 URL 是硬编码的,这就是我收到密码验证错误的原因。

您根本不需要这样做!

spring.datasource.username

会被环境变量(用户变量)覆盖SPRING_DATASOURCE_USERNAME

因此您可以从 application.properties 中删除此条目(并重新启动您的 IDE 以防最近添加了环境变量)

请阅读 Spring 引导文档中有关配置的更多信息:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config

在搜索这个问题时遇到了这个 post。 spring 不会在缺少某些环境变量时填充空值或空白,而是将占位符文本填充为 属性 值中的字符串。由于在没有环境变量的情况下,人们总是更喜欢 null 或 "" 等默认值而不是占位符文本本身,因此您可以使用冒号提供此值,如下所示。

spring.datasource.username=${SPRING_DATASOURCE_USERNAME : null}

至于你的问题,虽然它是一个很老的问题,但你在从 application.properties 中删除条目后获得了用户名。只是这个用户没有被正确验证,可能是因为密码没有在环境变量中配置或设置。