Покрытие конфигурации лучше профиля
В производственной практике охват конфигурации является распространенным методом для решения различных конфигураций в разных средах. Например, используйте файлы конфигурации на производственном сервере, чтобы перезаписать файлы в пакете или использовать централизованную службу конфигурации, чтобы перезаписать конфигурацию бизнеса по умолчанию.
По сравнению с механизмом профиля (такого как профиль Maven и свойства Spring Boot, специфичные для профиля), разные среды используют разные файлы конфигурации, а метод наложения более выгоден. Программистам не нужно заботиться об адресе, учетной записи и другой информации базы данных производственной среды во время разработки. Они могут работать в разных средах, строясь одновременно. Механизм профиля должен записать конфигурацию производственной среды в файл ресурса проекта, и различные параметры конструкции или параметры работы должны использоваться для различных сред.
Spring предоставляет гибкие возможности расширения конфигурации, с несколькими способами интеграции пользовательских источников атрибутов, что позволяет легко охватить конфигурацию.
Эта статья написана на основе Spring Boot 1.4.8/Spring 4.3.12
Используйте аннотацию @propertySource для реализации пользовательских файлов конфигурации и переопределения конфигурации
@ConfigurationProperties@ConfigurationPublic Class Demoperperties {// Свойства с Getter/Setters} @Propertysource (value = {"test.properties", "file: /etc/test.properties",}, engoreresourcenotfound = true) @configurationpublic class demoautoconfiguration {@autowired private demoperperties demoperperties; @Postconstruct public void init () {System.out.println (demoproperties); }}Spring поддерживает внедрение пользовательских файлов конфигурации с использованием аннотаций PropertySource, где «test.properties» приведет к тому, что Spring загружает файл из ClassPath, «File: /etc/test.properties» приведет к тому, что Spring загружает /етк/тест.
В то же время, поскольку «file: /etc/test.properties» находится после «test.properties», это позволяет файловому файлу конфигурации файловой системы перезаписать конфигурацию в разделе ClassPath.
Пользовательская фабрика источника свойства
Если вы хотите настроить источник свойства более гибким, например, загрузка конфигураций из централизованной службы конфигурации, вы можете реализовать интерфейс PropertySourceFactory и настроить заводские параметры аннотации PropertySource.
@Configuration@propertysource (value = ""/*Placeholder*/, factory = compositepropertysourcefactory.class) открытый класс compositeconfigautoconfiguration {}Поле значения используется для указания файла ресурса, соответствующего источнику конфигурации. Если файл ресурса не требуется, его можно настроить как любое значение. Значение параметра будет передано методу CreatePropertySource параметра завода.
Если поле IgnerEresourcenotFound указывается как истинное, исключение, которое будет проигнорировано фабрикой, в противном случае оно приведет к сбою стартапа. Иногда это хорошая практика, чтобы непосредственно разоблачить неудачу стартапа.
Определение интерфейса PropertySourceFactory заключается в следующем:
/*** Интерфейс стратегии для создания ресурсов {@link PropertySource}. * * @author Juergen Hoeller * @since 4.3 * @see defaultpropertysourcefactory * /public interface propertysourcefactory { /** * Создать {@link Propertysource}, который завершает данное ресурс. * @param Название Имя источника свойства * @param resource Ресурс (потенциально кодированный) для обертывания * @return the new {@link Propertysource} (никогда {@code null}) * @Throws ioException Recorce Resource Resolution */ PropertySource <?> CreatePropertysource (String name, incodedrСледует отметить, что время нагрузки свойств.
PropertySourceFactory требует, чтобы класс реализации возвращал свойство. Свойства - это основной интерфейс функции свойства Pring Property (или Configuration) и имеет много реализаций, таких как:
Фактические классы реализации намного уступают этим. Для конкретных целей вы можете прочитать пружинную документацию или исходный код.
MapPropertySource и CompositePropertySource обычно используются при настройке источников свойств.
MapPropertySource может использоваться для обертывания данных о свойствах, которые он загружается, см. Его метод конструкции.
public MapPropertySource (имя строки, карта <строка, объект> источник) {super (name, source);}Последний может загружать несколько источников атрибутов, объединив и настроив порядок переопределения. Например:
PropertySource <?> PackageInsidePropertySource = PackageInsidePropertySourceiterateLoader.loadPropertySource (CompositePropertySource); CompositePropertySource.AddPropertySource (PackageInsidePropertySource); PropertySource <?> OuterFilePropertySource = OuterFilePropertySourceiterateLoader.LoadPropertySource (CompositepropertySource) ;// Приоритет выше, чем прежнее первое) превышает прежнее, чем прежнее, чем прежнее, чем прежнее. CompositePropertySource.AddFirstPropertySource (OuterFilePropertySource);
Метод AddFirstPropertySource может установить входящее свойство для самого высокого приоритета (внутри этого CompositePropertySource), а метод AddPropertySource является противоположным, а приоритет ниже этого.
Загрузите все файлы конфигурации с одним и тем же именем в пакете JAR в зависимости
Загрузка файла конфигурации непосредственно с ClassPath требует, чтобы файл должен существовать в группе Class. Рассмотрим в веб-проекте, если файл существует в пакете JAR-зависимости, то есть он находится в Web-Inf/lib/xxx.jar, он не может быть загружен непосредственно на основе ClassPath. В настоящее время вы можете использовать PathmatchingResourcepatternResolver, предоставленный весной, чтобы сканировать все пакеты JAR по имени ресурса для достижения цели.
Приватный список <sursce> getPackageInsiderSourcesBypattern (String ResourceName) Throws IOException {String resourcepathPathpathern = resourcepatternresolver.classpath_all_url_prefix + hbootconfigconstants.configs + resourceName; Resourcepatternresolver resourcepatternresolver = new pathmatchingresourcepatternresolver (); return arrays.aslist (resourcepatternresolver.getresources (resourcepathpathern));} Затем вы можете использовать ResourcePropertySource для построения недвижимости из ресурса, чтобы перейти к весне.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.