Spring(不启动)从多个项目加载多个yml文件

时间:2018-03-02 11:11:50

标签: java spring spring-profiles spring-properties

所以我阅读了有关如何配置Spring引导以了解比application.yml更多yml文件以及如何包含这些文件的文章,即使是从子项目中也是如此。然而,对于" pure"弹簧。不过我认为我正朝着正确的方向前进,我无法恢复配置值。

这是一个直接的多项目gradle构建 - 为简单起见 - 两个项目。一个项目是"主要"春季项目 - 即。 Spring Context在此项目中初始化。另一个是"支持"具有一些数据库实体和数据源配置的模块。我们使用基于注释的配置。

我希望能够在支持模块中定义一组配置属性,并根据激活的弹簧配置文件,相应地加载数据源配置。

This SA帖子让我跟着不同答案的不同链接并从中构建我的解决方案。结构和代码如下:

mainproject
  src
    main
      groovy
        Application.groovy
    resourcers
      application.yml

submodule
  src
    main
      groovy
        PropertiesConfiguration.groovy
        DataSource.groovy
    resources
      datasource.yml

PropertiesConfiguration.groovy使用datasource.yml添加PropertySourcesPlaceholderConfigurer

@Configuration
class PropertiesConfiguration {

    @Bean
    public PropertySourcesPlaceholderConfigurer configure() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer()
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean()
        yamlPropertiesFactoryBean.setResources(new ClassPathResource("datasource.yml"))
        configurer.setProperties(yamlPropertiesFactoryBean.getObject())
        return configurer
    }
}

Datasource.groovy应该根据弹簧配置文件读取值(为了便于阅读而减少代码):

@Autowired
Environment env

datasource.username = env.getProperty("datasource.username")

env.getProperty返回null。无论什么样的弹簧轮廓是活跃的。我可以使用@Value注释访问配置值,但是不会遵循活动配置文件,即使没有为该配置文件定义它也会返回一个值。我的yml看起来像这样:

---
spring:
  profiles: development

datasource:
  username: sa
  password:
  databaseUrl: jdbc:h2:mem:tests
  databaseDriver: org.h2.Driver

我可以从Application.groovy使用调试器检查我的ApplicationContext并确认我的PropertySourcesPlaceholderConfigurer存在且值已加载。检查applicationContext.environment.propertySources它不存在。

我错过了什么?

0 个答案:

没有答案