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

Spring boot不从两个yaml文件加载列表

谢俊英
2023-03-14

在Spring,如果我们有两个.yaml文件作为。(包含在应用程序中)

application-one.yaml          application-two.yaml            
-------------------           ------------------- 
abc:                          abc:
 flow:                         flow:
    - id: 'remote02'            - id: 'remote04'
    - id: 'remote03'            - id: 'remote05'

如果这个配置的属性类类似于-

@ConfigurationProperties(prefix = "abc")
class Abc {
    List<Flow> flow;
}

class Flow{
    String id;
}

则仅从一个文件加载“流”,即流。size()给出2.(remote04,remote05。这取决于application.yaml中配置文件的顺序)

但如果我将yamls文件更改为-

application-one.yaml          application-two.yaml            
-------------------           ------------------- 
abc:                          abc:
 flow:                         flow:
    remote02:                     remote04:
       id: remote02                  id: remote04
    remote03:                     remote05:
       id: remote03                  id: remote05

和属性类

@ConfigurationProperties(prefix = "abc")
class Abc {
    HashMap<String, Flow> flow;
}

class Flow{
    String id;
}

现在hashmap将有4个条目。i、 e.流量。size()给出4

那么,这是否意味着Spring不会从两个yamls加载List结构并将它们添加在一起?

如果是真的,如何克服这个限制?

共有1个答案

阎自怡
2023-03-14

我认为这是因为Spring boot将YAML文件转换为属性。在第一种情况下,文件将按如下方式转换:

application-one.properties    application-two.properties
-------------------           ------------------- 
abc.flow[0].id=remote2        abc.flow[0].id=remote4
abc.flow[1].id=remote3        abc.flow[1].id=remote5

但在第二种情况下,你会得到

application-one.properties      application-two.properties
-------------------             ------------------- 
abc.flow.remote02.id=remote02   abc.flow.remote04.id=remote04                       
abc.flow.remote03.id=remote03   abc.flow.remote05.id=remote05

如您所见,在第一种情况下,您将获得两对相同的属性,而在第二种情况下,您将获得四个唯一属性。因此,在第一种情况下,两个属性将消失,因为它们是多余的。

我不确定你能否避免这种情况。上面链接的文档说,您可以使用<code>YamlMapFactoryBean</code>,但我对Spring的了解不够,无法告诉您是否以及如何将其与<code>@ConfigurationProperties</code>相结合。

 类似资料:
  • 问题内容: 我需要从文件加载属性,该文件包含应用程序可以从中读取文件的文件夹的路径。 我正在使用以下代码来注入属性: 用于开发的文件位于下,在生产环境中使用以下命令运行应用程序,以覆盖开发设置: Spring Boot文档说: SpringApplication将在以下位置从application.properties文件加载属性,并将其添加到Spring Environment中: 当前目录的/

  • 我需要从文件加载一个属性,该文件包含应用程序可以从中读取文件的文件夹的路径。 当前目录 类路径/配置包 类路径根 是否必须使用类或添加一个特殊注释来启用Spring Boot中对的支持? 编辑:文件包含一些其他属性,这些属性由Spring Boot成功加载,如或。

  • 我必须调整一个有应用程序的springboot应用程序。配置应用程序属性的yaml文件。 使用java类文件中的注释映射属性,以读取值@ConfigurationProperties(prefix=“propName”) 现在的要求是我需要有另一个文件称为application-profile-2.yml和重命名application.ymlapplication-profile-1.yml,这些

  • 我在应用程序中有我的配置。类路径根中的yml文件(src/main/resources/)。当我正常启动应用程序时,配置加载良好。然而,在我的测试中,应用程序。yml文件根本没有加载。 我的测试的标题如下所示: 配置类: 当我调试应用程序时,我看到yml文件被加载到ConfigFileApplication ationListener中,但在测试中没有调用ConfigFileApplication

  • 使用Spring Boot 1.3.0.Release 编辑:一种工作方法是手动操作:

  • 问题 在本机硬盘上有一个HTML文件,需要对它进行解析从中抽取数据或进行修改。 办法 可以使用静态Jsoup.parse(File in, String charsetName, String baseUri) 方法: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http