当前位置: 首页 > 知识库问答 >
问题:

spring boot无法读取配置文件表达式中的属性

谢运良
2023-03-14

环境详情:

  • spring boot 2.1.15.release
  • spring 5.2.2.发布

我有下面的application.yml文件,

creds:
    first: default value
    
---

spring.profiles: dev

creds:
    first: dev value


---

spring.profiles: dev & mobile

creds:
    first: dev-mobile value

而且

spring.profiles.active=dev,移动

然而,问题是它总是加载'defaultvalue'。

配置文件“dev&mobile”下的属性从不加载。

感谢任何帮助。

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-multi-profile-yaml

共有2个答案

刘俊语
2023-03-14

似乎您在同一个文件中添加了每个环境,对于dev application-dev.yml应该是一个文件

reds:
    first: dev value

生产的另一个文件

应用程序-Production.yml

reds:
    first: production value

继续。

公羊伟志
2023-03-14

首先,如果您单独定义配置文件(profile:dev)的话,您的application.properties不可能选择组合的配置文件(profile:dev&mobile)&也不可能再次将它与其他配置文件组合(再次与mobile组合,我指的是dev&mobile)。这不会给你任何例外,但你的组合配置文件将不会得到一个选择。

文档中说,我们可以将概要文件与符号和其他符号结合起来,请参阅文档,我们可以进行任何复杂的组合。但是,我不建议您单独定义一个配置文件&也可以将它与其他配置文件结合起来,就像您在单独定义dev配置文件之后将dev和mobile结合起来一样。

下面的示例说明了它的工作原理

application.yaml

creds:
  first: default value

---

spring:
  profiles: dev

creds:
  first: dev value

---

spring:
  profiles: mobile

creds:
  first: mobile val

---

spring:
  profiles: dev & mobile

creds:
  first: dev-mobile value

如果我们单独定义一个配置文件&将它与其他配置文件组合起来,会发生什么?(和你一样)。

在这个application.yml文件中,我定义了dev、mobile&combined概要文件(dev&mobile),我们知道还有一个默认概要文件。

如果我不调用任何配置文件,正如我们所知,它将选择默认配置文件。例如,如果我们正在读取如下所示的属性:

@Value("${creds.first}")
String value;

属性值:默认值

如果--spring.profiles.active=dev,那么它将选择dev profile。

属性值:dev值

如果--spring.profiles.active=mobile,那么它将选择mobile Profile。

属性值:移动值

如果--spring.profiles.active=mobile,dev,那么在这里,我们尝试同时调用两个概要文件,理想情况下,我们希望选择组合的概要文件。但它不会被采摘。因为我们定义了单独的profiles(profile:dev和profile:mobile),首先它会从mobile profile读取属性,然后它会从dev profile读取属性,如果找到,它会用dev profile的属性值重写。如果找不到,它将只坚持移动配置文件的属性值。我是说,上面写着

属性值:dev值

如果--spring.profiles.active=dev,mobile,那么在这里,它首先从dev配置文件中读取属性值,然后再次在mobile配置文件中查找属性,如果找到,则覆盖该值。如果找不到,它将只坚持dev配置文件的属性值。

这就是它不会读取组合配置文件(dev&mobile)的原因。

如何读取组合配置文件&何时读取组合配置文件?

根据文档,它可以选择一个组合的配置文件,如果提到的配置文件不应该在其他地方单独定义:

示例:application.yaml

creds:
  first: default value

---

spring:
  profiles: showcase

creds:
  first: showcase value

---

spring:
  profiles: dev & mobile

creds:
  first: dev-mobile value

在这里,dev、mobile使用&组合在一起,它们在别处没有单独定义。因此,现在如果我们调用--spring.profiles.active=dev,mobile,它将选择组合的概要文件值

属性值:dev-mobile值

最后,如果--spring.profiles.active=dev或--spring.profiles.active=mobile,它将不会选择组合的概要文件。因此,默认配置文件将会生病。

属性值:默认值

示例:https://github.com/donthadineshkumar/multi-profile-document.git

 类似资料:
  • 你好,我在我的项目中使用Spring Boot和Hikari进行db连接。spinger引导版本是2.2.5.RELEASE,Hikari是3.4.2。但是,当我运行我的项目时,它总是使用Hikari默认配置值,而不是使用我的属性文件中的值。这是我的属性: 这是我在应用程序配置中的数据源: 下面是输出:10:23:19.050[main]DEBUG com . zax xer . hikari .

  • 我的Spring云配置服务器在尝试使用http://localhost:8080/application/default访问属性文件内容时抛出以下错误 我的申请。配置服务器中的属性如下所示 <代码>Spring。云配置。服务器吉特。uri=/Users/joe/MyProgs/Java/spring ws/config,我甚至尝试了这个spring。云配置。服务器吉特。uri=${HOME}/My

  • 我正在使用Java的发送SMS。我已经加载了log4j jar文件,并将文件放置在正确的位置,但它仍然无法读取它,并得到以下异常: 例外文本:

  • 我在玩spring boot并试图创建一个特定于配置文件的配置文件。我称之为。 我还试图使用gradle命令从终端运行:,但得到了相同的错误。只有当我将YAML文件重构为时,它才起作用。我做错了什么?我打算有3个配置文件,如本地,开发和Prod。

  • 问题内容: Cobra和Viper中的文档使我感到困惑。我做了,然后在项目目录中做了。我有一个名为,这里是命令中的init函数。 我的配置文件如下所示: 当我打电话给我的时候 当我打电话时看到了… 因此它正在使用配置文件,但是似乎没有人正在读取它。也许我误解了眼镜蛇和毒蛇的工作方式。有任何想法吗? 问题答案: 要结合和,首先使用Cobra定义标志: 与Viper绑定: 并通过Viper方法获取变量