所以我已经阅读了关于如何配置 Spring boot 以了解更多的 yml 文件application.yml
以及如何包含这些文件的文章 - 甚至来自子项目。然而,很难找到描述“纯” Spring 相同的文章。但是我认为我正朝着正确的方向前进,我只是无法恢复我的配置值。
这是一个直接的多项目 gradle 构建 - 为简单起见 - 两个项目。一个项目是“主要”春季项目 - 即。Spring Context 在这个项目中被初始化。另一个是带有一些数据库实体和数据源配置的“支持”模块。我们使用基于注释的配置。
我希望能够在支持模块中定义一组配置属性,并根据激活的弹簧配置文件,相应地加载数据源配置。
这篇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
返回空值。无论何种弹簧轮廓处于活动状态。我可以使用 @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
它不存在。
我错过了什么?