Предисловие
Чтобы гибко настроить проекты, мы часто используем файлы конфигурации. Общие файлы конфигурации такие как XML и свойства. Springboot позволяет использовать свойства и файлы YAML в качестве внешних конфигураций. Поддержка компилятора для языка YAML сейчас недостаточно, и файл свойств все еще используется в качестве внешней конфигурации.
Прежде чем появиться Cloud Config, я реализовал центр конфигурации на основе ZK и исключил файл конфигурации локальных свойств. Принцип очень прост, но я только что перегрузил mergeProperties() PropertyPlaceholderConfigurer:
/*** перегружать реализацию свойства Merge* Свойства файла первой загрузки, затем объединяйтесь в свойства, прочитанные Центром конфигурации ZK** @return объединенные свойства* @throws IOException Exception*/ @repect -repeties properties mergeproperties () throws ioexception {свойства result = new Properties ();); // загрузить конфигурацию свойств родительского класса MergeProperties = super.mergeProperties (); result.putall (MergeProperties); // Загрузите чтение конфигурации с zk map <string, string> configs = loadzkconfigs (); result.putall (configs); вернуть результат;} Эта реализация довольно проста в использовании в Spring Projects, но в последнее время некоторые проекты Spring-Boot обнаружили, что эта реализация заполнителя и @ConfigurationProperties(prefix = "xxx") не может работать.
То есть свойства не решены, и вы можете прочитать их по -своему, но если есть много свойств для @Value, это все еще довольно громоздко. Я все еще склонен использовать префикс @ConfigurationProperties. Поэтому я посмотрел на документацию Spring Boot и обнаружил, что PropertySource
заказ:
* Свойства глобальных настроек Devtools в вашем домашнем каталоге (~/.spring-boot-devtools.properties, когда DevTools активен).
* @Testpropertysource аннотации на ваших тестах.
* @SpringBootTest#Антибус аннотации свойств на ваших тестах.
* Аргументы командной строки.
* Свойства от spring_application_json (встроенный json, встроенный в переменную среды или свойство системы)
* ServletConfig Parameters.
* ServletContext Параметры.
* Атрибуты JNDI из Java: Comp/Env.
* Свойства системы Java (System.getProperties ()).
* Переменные среды ОС.
* Randomvaluepropertysource, который обладает только случайными свойствами.*.
* Свойства приложения, специфичные для профиля за пределами вашей упакованной JAR (Application- {профиль} .properties и варианты YAML)
* Свойства приложения, специфичные для профиля, упакованные внутри вашей JAR (Application- {профиль} .properties и YAML варианты)
* Свойства приложения за пределами вашей упакованной JAR (Application.Properties и YAML варианты).
* Свойства приложения, упакованные внутри вашей JAR (Application.properties и варианты YAML).
* @PropertySource Аннотация на ваших классах @Configuration.
* Свойства по умолчанию (указанные с использованием SpressApplication.setDefaultProperties).
Нетрудно обнаружить, что он может проверить свойства в свойствах системы Java. То есть просто напишите свойства, прочитанные MergeProperties в реквизиты Java System, посмотрите на исходный код и найдите точку входа.
/*** Реализация свойства обработки перегрузки* Согласно параметрам, решите, написать ли объединенные реквизиты на свойства системы. Spring boot requires * * @param beanFactoryToProcess * @param props Merged properties* @throws BeansException */@Overrideprotected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException { // Original logic super.processProperties(beanFactoryToProcess, props); // Написать в системное свойство if (writepropstosystem) {// Написать все свойства в систему для перечисления Spring Boot <?> PropertyNames = props.propertyNames (); while (PropertyNames.hasmoreElements ()) {String PropertyName = (String) PropertyNames.NextElement (); String PropertyValue = props.getProperty (PropertyName); System.SetProperty (PropertyName, PropertyValue); }}} Чтобы избежать чрезмерного воздействия, установлен переключатель для записи свойств системы. Если это проект Spring Boot, включите его, чтобы свести к минимуму влияние на онлайн-проекты, не являющиеся пружинами. Затем @ConfigurationProperties Spring Boot прекрасно читают свойства;
См. Конкретный код: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
@OverridePublic Object PostProcessBefureInitialization (Object Bean, String Beanname) бросает Beansexception {configurationProperties Annotation = Annotationutils .findannotation (bean.getClass (), configurationProperties.class); if (аннотация! = null) {postprocessbefureinialization (Bean, Beanname, Annotation); } annotation = this.beans.findfactoryannotation (beanname, configurationproperties.class); if (аннотация! = null) {postprocessbefureinialization (Bean, Beanname, Annotation); } return Bean;}Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.