Автор оригинала: mkyong.
Весной вы можете использовать @PropertySource
аннотацию для экстернализации вашей конфигурации в файл свойств. В этом уроке мы покажем вам, как использовать @PropertySource
для чтения файла свойств и отображения значений с помощью @Value
и Окружающая среда
.
P.S @PropertySource доступен с весны 3.1
1. @Источник свойств и @значение
Классический пример: прочитайте файл свойств и отобразите его с помощью ${}
.
mongodb.url=1.2.3.4 mongodb.db=hello
package com.mkyong.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; //... @Configuration @ComponentScan(basePackages = { "com.mkyong.*" }) @PropertySource("classpath:config.properties") public class AppConfigMongoDB { //1.2.3.4 @Value("${mongodb.url}") private String mongodbUrl; //hello @Value("${mongodb.db}") private String defaultDb; @Bean public MongoTemplate mongoTemplate() throws Exception { MongoClientOptions mongoOptions = new MongoClientOptions.Builder().maxWaitTime(1000 * 60 * 5).build(); MongoClient mongo = new MongoClient(mongodbUrl, mongoOptions); MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, defaultDb); return new MongoTemplate(mongoDbFactory); } //To resolve ${} in @Value @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { return new PropertySourcesPlaceholderConfigurer(); } }
2. @Источник собственности и окружающая среда
Spring рекомендует использовать Среду
для получения значений свойств.
package com.mkyong.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; //... @Configuration @ComponentScan(basePackages = { "com.mkyong.*" }) @PropertySource("classpath:config.properties") public class AppConfigMongoDB { @Autowired private Environment env; @Bean public MongoTemplate mongoTemplate() throws Exception { String mongodbUrl = env.getProperty("mongodb.url"); String defaultDb = env.getProperty("mongodb.db"); MongoClientOptions mongoOptions = new MongoClientOptions.Builder().maxWaitTime(1000 * 60 * 5).build(); MongoClient mongo = new MongoClient(mongodbUrl, mongoOptions); MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, defaultDb); return new MongoTemplate(mongoDbFactory); } }
3. Больше примеров @PropertySource
Более распространенные примеры.
3.1 Пример разрешения ${} в @PropertySource
местоположениях ресурсов.
@Configuration @PropertySource("file:${app.home}/app.properties") public class AppConfig { @Autowired Environment env; }
Установите системное свойство во время запуска.
System.setProperty("app.home", "test"); java -jar -Dapp.home="/home/mkyon/test" example.jar
3.2 Включите несколько файлов свойств.
@Configuration @PropertySource({ "classpath:config.properties", "classpath:db.properties" //if same key, this will 'win' }) public class AppConfig { @Autowired Environment env; }
4. Весна 4 и @PropertySources
Некоторые улучшения весной 4.
4.1 Вводит новый @PropertySources
для поддержки Java 8 и лучшего способа включения нескольких файлов свойств.
@Configuration @PropertySources({ @PropertySource("classpath:config.properties"), @PropertySource("classpath:db.properties") }) public class AppConfig { //... }
4.2 Разрешить @PropertySource
игнорировать не найденный файл свойств.
@Configuration @PropertySource("classpath:missing.properties") public class AppConfig { //... }
Если отсутствует.свойства
не найден, система не может запуститься и выбрасывает Исключение FileNotFoundException
Caused by: java.io.FileNotFoundException: class path resource [missiong.properties] cannot be opened because it does not exist
Весной 4 вы можете использовать ignoreResourceNotFound
для игнорирования файл свойств не найден
@Configuration @PropertySource(value="classpath:missing.properties", ignoreResourceNotFound=true) public class AppConfig { //... }
@PropertySources({ @PropertySource(value = "classpath:missing.properties", ignoreResourceNotFound=true), @PropertySource("classpath:config.properties") })
Сделано.
Рекомендации
- Sprong IO – Источник свойств
- Весенний ввод–вывод – Источники свойств
- Весенняя конфигурация ввода–вывода
- Весна @Значение значение по умолчанию
- Весенняя ДЖИРА: SPR-8539
Оригинал: “https://mkyong.com/spring/spring-propertysources-example/”