Итак, у меня есть приложение с пружиной 4. Он состоит из 3 файлов свойств:Весна, файл свойств переключателя в зависимости от профиля
application.properties
application-dev.properties
application-prod.properties
В заголовке application.properties, я указать профиль я хочу:
spring.profiles.active=dev
Таким образом, в двух других файлах:
application-dev.properties
application-prod.properties
У меня есть повторяющиеся записи по ним, поэтому скажем в файле dev у меня есть: host=foo
и в prod у меня: host=bar
Весна затем берет значение в соответствии с активным профилем. Для того, чтобы сказать Spring, где файлы, у меня есть класс конфигурации:
@Configuration
@ComponentScan(basePackages = "my.base.package")
@PropertySource({ "classpath:application.properties", "classpath:application-dev.properties", "classpath:application-prod.properties" })
public class ServiceSpringConfiguration
{
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer()
{
return new PropertySourcesPlaceholderConfigurer();
}
}
Но я заметил, что таким образом, пружинные загружает все свойства из всех файлов и не допускает дубликатов, а просто загружает который вы запрашиваете, независимо от профиля. Как я могу сказать Spring загрузить файлы в соответствии с выбранным профилем? я бы ожидать Spring для сканирования имени файла и попытаться соответствовать имени профиля ....
Btw я отношусь к собственности, как так:
@Value("${host}")
private String host;
Spring Загрузочный делает это для вас, нормальная весна не делает. Поэтому либо используйте Spring Boot, либо используйте собственный механизм для создания (дополнительных) источников свойств. Если вы уже используете Spring Boot, удалите '@ PropertySource' и пусть Spring Boot обработает загрузку (в этом случае вам также не понадобится« PropertySourcesPlaceholderConfigurer »). –
Спасибо, я внедрил принятый ответ, и он работает очень хорошо, но я посмотрю на документы Spring Boot, thx за советом, – JBoy