Поэтому я прочитал множество статей о том, как настроить загрузку Spring так, чтобы она знала о большем количестве файлов 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
его НЕТ.
Что мне не хватает?