无法在Spring启动应用程序中从自定义yml文件加载配置

时间:2017-06-14 09:17:30

标签: spring-boot configuration properties-file

我在spring spring服务中从application.yml加载自定义配置。

我已经通过bean类注释如下,

    @Component
    @ConfigurationProperties("app")
    public class ContinentConfig {

    private Map<String, List<Country>> continents = new HashMap<String, List<Country>>();

          //get/set/tostring methods
  }

我的自定义类国家/地区包含2个字段

public class Country {

    String name;
    String capital;

    //get/set/tostring methods
}

在application.yml中,我有如下,

app:
  continents: 
    Europe: 
      - name: France
        capital: Paris
    Asia: 
      - name: China
        capital: Beijing       

通过上述设置,我可以从 application.yml 加载配置。

我现在想要将配置解压缩到同一 src / main / resources 文件夹中的单独的 continentconfig.yml 。因此,我将自定义配置移动到continentconfig.yml,在application.yml中保留其他属性,如 server.port

continentconfig.yml 与我之前在application.yml中的内容相同。

我还在ContinentConfig类中添加了以下注释,

@Component
@ConfigurationProperties("app")
@EnableConfigurationProperties
@PropertySource(value="classpath:continentconfig.yml")
public class ContinentConfig {

}

在此更改之后,我发现配置未从 continentconfig.yml 加载到 ContinentConfig bean。

有人可以帮助解决问题。

2 个答案:

答案 0 :(得分:1)

您无法做到这一点,您应该使用属性文件。

  

24.6.4 YAML缺点

     

无法通过@PropertySource注释加载YAML文件。所以   如果您需要以这种方式加载值,则需要使用a   属性文件。

您可以创建初始值设定项并使用telegram.paste <- function(...) {paste("START", "...", "STOP")}

答案 1 :(得分:0)

我相信通过外部化,您的意思是使用属性文件从github /或其他此类托管库中配置的文件中加载配置?您可以通过使用bootstrap.yml很好地做到这一点。这将从外部文件加载所有配置,并且还允许设置使用本地application.properties/application.yml

覆盖它们。

春天:   应用:     名称:   云 :     配置:       uri:

还请确保您的pom中有弹簧云以解决此问题,以防万一

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
        </dependency>

如果您的本地yml属性文件未加载到类路径中,请添加以下内容

<resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.jks</include>
                </includes>
            </resource>
        </resources>

注意:最好使用YamlPropertySourceLoader将配置文件加载到类路径中,最重要的是,您可以使用上述配置