2017-06-14 18 views
1

我在我的弹簧引导服务中从application.yml加载自定义配置。无法在弹簧引导应用程序中加载自定义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

我现在想的配置提取到一个单独的continentconfig.yml在同一的src/main /资源文件夹中。因此,我将自定义配置移至continentconfig.yml,其他属性如server.port位于application.yml中。

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

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

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

} 

此更改后,我看到的配置是没有得到来自continentconfig.yml加载到ContinentConfig豆。

有人可以帮助解决问题。

回答

0

简而言之,你不能这么做,你应该使用属性文件。

24.6.4 YAML缺点

YAML文件无法通过@PropertySource注解加载。因此在 这种情况下,您需要以这种方式加载值,您需要使用 属性文件。

您可以创建初始化程序并使用YamlPropertySourceLoader

+0

谢谢澄清。但是,有没有另外一种方法可以在自己的yml文件中外部化自定义配置,也许可以将它用作配置文件特定的yml文件。 – juser

+0

您可以在'application.yml'中拥有一个基本配置,并且您可以覆盖它以获取所需的配置文件'application-dev.yml'等。另一种解决方法是使用'YamlPropertySourceLoader'。请参阅https://stackoverflow.com/questions/21271468/spring-propertysource-using-yaml –

相关问题