Рубрики
Без рубрики

Пример Spring @PropertySource

– Пример Spring @PropertySource

Автор оригинала: 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")
        })

Сделано.

Рекомендации

  1. Sprong IO – Источник свойств
  2. Весенний ввод–вывод – Источники свойств
  3. Весенняя конфигурация ввода–вывода
  4. Весна @Значение значение по умолчанию
  5. Весенняя ДЖИРА: SPR-8539

Оригинал: “https://mkyong.com/spring/spring-propertysources-example/”