Недвижимость повсюду весной
Время обновления: 2018-01-03
Разработчики, не разбирающиеся в свойствах Spring, могут счесть это немного запутанным, главным образом потому, что существует множество способов их настройки и использования.
Эта статья не является анализом принципов или анализом исходного кода, а лишь надеется помочь читателям лучше понять и использовать свойства Spring.
Использование свойств
Все читатели этой статьи использовали Spring.Давайте сначала посмотрим, как используются свойства.В Spring обычно используются следующие методы:
1. Использовать в файле конфигурации xml
то есть автоматическая замена${}
значение внутри.
<bean id="xxx" class="com.javadoop.Xxx">
<property name="url" value="${javadoop.jdbc.url}" />
</bean>
2. Использование инъекции @Value
@Value("${javadoop.jdbc.url}")
private String url;
3. Получено через среду
У этого метода есть оговорки. Не все методы конфигурации поддерживают получение значений свойств через интерфейс Environment.Тест pro можно использовать только при использовании аннотации @PropertySource, иначе он получитnull, Что касается того, как его настроить, то об этом мы скоро поговорим.
@Autowired
private Environment env;
public String getUrl() {
return env.getProperty("javadoop.jdbc.url");
}
Если он зарегистрирован в application.properties Spring Boot, это тоже нормально.
Конфигурация свойств
Ранее мы говорили о том, как использовать настроенные нами свойства, так как же их настроить? Spring предоставляет множество методов настройки.
1. Настроить через xml
Ниже приведен наиболее часто используемый метод настройки, и многие проекты написаны таким образом:
<context:property-placeholder location="classpath:sys.properties" />
2. Настроить через @PropertySource
Предыдущая конфигурация через xml очень распространена, но если у вас также естьстереть все файлы конфигурации xmlЕсли вы находитесь в порыве, вы должны использовать следующее:
@PropertySource("classpath:sys.properties")
@Configuration
public class JavaDoopConfig {
}
Обратите внимание, что здесь @PropertySource должен использоваться с @Configuration, что не будет подробно обсуждаться.
3. PropertyPlaceholderConfigurer
Если читатели видели это, не удивляйтесь, до Spring 3.1 это часто использовалось так:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:sys.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<!-- 这里可以配置一些属性 -->
</bean>
Конечно, мы также можем использовать соответствующую версию конфигурации Java:
@Bean
public PropertyPlaceholderConfigurer propertiess() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[]{new ClassPathResource("sys.properties")};
ppc.setLocations(resources);
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
4. PropertySourcesPlaceholderConfigurer
К моменту выпуска Spring 3.1 введениеPropertySourcesPlaceholderConfigurer, это новый класс, обратите внимание, что в названии на один больше, чем у предыдущего PropertyPlaceholderConfigurerSources, пакет, к которому он принадлежит, тоже отличается, он находится в пакете Spring-Context.
Разницы в конфигурации нет:
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:sys.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<!-- 这里可以配置一些属性 -->
</bean>
Также приходите с версией конфигурации Java:
@Bean
public PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[]{new ClassPathResource("sys.properties")};
pspc.setLocations(resources);
pspc.setIgnoreUnresolvablePlaceholders(true);
return pspc;
}
Связанные с Spring Boot
Spring Boot — это действительно хорошая вещь, и она так хороша из коробки. Вот краткое введение в соответствующий контент.
Быстро создайте проект Spring Boot:start.spring.io/
application.properties
Каждый из наших проектов имеет файл application.properties по умолчанию, этот файл конфигурации не нужно делать, как указано выше.регистр, Spring Boot нам поможетавтоматическая регистрация.
Конечно, возможно, вы можете изменить имя, если хотите, просто укажите свое имя файла при запуске:
java -Dspring.config.location=classpath:sys.properties -jar app.jar
application-{env}.properties
Чтобы указать разные конфигурации для разных сред, мы будем использовать это.
Например, информация о соединении с базой данных тестовой среды и рабочей среды отличается.
Поэтому на основе application.properties нам также необходимо создать новые application-dev.properties и application-prd.properties для настройки информации, относящейся к среде, а затем указать среду при запуске.
java -Dspring.profiles.active=prd -jar app.jar
В результате конфигурации в файлах application.properties и application-prd.properties будут прописаны, при наличии повторяющихся ключей файл application-prd.properties будет иметь более высокий приоритет.
@ConfigurationProperties
Эта аннотация доступна только в Spring Boot.
Даже если вы не используете эту аннотацию, вы можете увидеть это в проектах с открытым исходным кодом, вот краткое введение.
Давайте возьмем пример, чтобы быть более интуитивным. Как упоминалось ранее, заполните следующую информацию в файле конфигурации, вы можете написать application.properties или использовать метод, описанный в первом разделе.
javadoop.database.url=jdbc:mysql:
javadoop.database.username=admin
javadoop.database.password=admin123456
Java-файл:
@Configuration
@ConfigurationProperties(prefix = "javadoop.database")
public class DataBase {
String url;
String username;
String password;
// getters and setters
}
Таким образом, bean-компонент типа DataBase автоматически регистрируется в контейнере Spring, и свойства устанавливаются.
Динамически изменять значения свойств во время запуска
Я не думаю, что это нуждается в особом представлении, те, кто использует Spring Boot, в принципе должны его знать.
Конфигурация атрибута имеет порядок переопределения, то есть когда появляется один и тот же ключ, какое значение превалирует.
Параметры запуска > application-{env}.properties > application.properties
Параметры запуска динамически задают свойства:
java -Djavadoop.database.password=admin4321 -jar app.jar
Кроме того, вы также можете использовать системные переменные среды для установки свойств, а также можете указывать случайные числа и т. д. Это действительно гибко, но бесполезно, поэтому я не буду его представлять.
Суммировать
Если читатели хотят глубже понять свойства Spring, им необходимо понять исходный код, относящийся к интерфейсу Spring Environment. Заинтересованным читателям рекомендуется просмотреть исходный код, чтобы увидеть
(Конец полного текста)