【发布时间】:2018-08-10 14:22:53
【问题描述】:
所以我已经阅读了关于如何配置 Spring boot 以了解比 application.yml 更多的 yml 文件以及如何包含这些文件的文章 - 甚至来自子项目。然而,很难找到描述“纯” Spring 相同的文章。但是我认为我正朝着正确的方向前进,我只是无法恢复我的配置值。
这是一个简单的多项目 gradle 构建,为简单起见,有两个项目。一个项目是“主要”春季项目 - 即。 Spring Context 在这个项目中被初始化。另一个是带有一些数据库实体和数据源配置的“支持”模块。我们使用基于注解的配置。
我希望能够在支持模块中定义一组配置属性,并根据激活的任何 spring 配置文件,相应地加载数据源配置。
This SA 帖子让我非常关注不同答案中的不同链接,并由此构成我的解决方案。结构和代码如下:
mainproject
src
main
groovy
Application.groovy
resourcers
application.yml
submodule
src
main
groovy
PropertiesConfiguration.groovy
DataSource.groovy
resources
datasource.yml
PropertiesConfiguration.groovy 使用PropertySourcesPlaceholderConfigurer 添加datasource.yml:
@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 它不存在。
我错过了什么?
【问题讨论】:
标签: java spring spring-profiles spring-properties