所以我阅读了有关如何配置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
它不存在。
我错过了什么?