Предисловие
Эта статья будет посвящена объяснению использования аннотации @propertysource в пружине и как загрузить указанный файл конфигурации с помощью аннотации свойств. Он также использует аннотацию недвижимости и аннотации @ConfigurationProperties. Я не скажу многое ниже, давайте учимся и учимся с редактором.
1.1. Свойства аннотации загружают указанный файл свойства
Spring Framework предоставляет аннотацию свойств с целью загрузки указанного файла свойства. Затем давайте посмотрим, как использовать эту аннотацию. Сначала мы определяем класс конфигурации и добавляем аннотацию свойств в класс следующим образом:
@Component@propertysource (value = {"classpath: config/jdbc-bainuo-dev.properties"}, engoreresourcenotfound = false, encoding = "utf-8", name = "jdbc-bainuo-dev.properties",) public clostAsourconfig1 {private string; public String getUrl () {return url; } public void seturl (string url) {this.url = url; } @Override public String toString () {return "customerdatasourceConfig {" + "url = '" + url +'/'' + '}'; }} Целью вышеуказанного кода является загрузка jdbc-bainuo-dev.properties в файл конфигурации в пути Classpath. Там, где кодирование используется для указания кодирования, используемого для чтения файла свойств, мы обычно используем UTF-8; Игнорингесуркунотфунд означает, сообщается о том, сообщается о ошибке, когда указанный файл конфигурации не существует, а по умолчанию неверно; Например, указанный выше файл свойств загрузки- jdbc-bainuo-dev.properties . Если файл не существует, программа не будет сообщать об ошибке, когда IgnerEresourcenotFound верна. Если игнорирование INSERERESOURCENOTFOUND неверно, программа будет сообщать о ошибке напрямую. В реальной разработке проекта лучше всего установить игнорирование. Значение по умолчанию этого параметра неверно.
Значение состоит в том, чтобы установить файл атрибута для загрузки, а несколько свойств можно загрузить за один раз. Значение имени, которое мы установили, является jdbc-bainuo-dev.properties . Это значение должно быть уникальным в среде Springboot, если не установлено, значение: « class path resource [config/jdbc-bainuo-dev.properties] ».
Многие люди могут задаться вопросом, почему это « class path resource [config/jdbc-bainuo-dev.properties] »? Это включает в себя ресурс класса инкапсуляции весной для файлов ресурсов. Значение, которое мы настроили выше,-это « classpath:config/jdbc-bainuo-dev.properties », поэтому пружина обнаружила, что он начинается с ClassPath, поэтому конец использует подкласс ClassPathresource. Если он начинается с файла, класс, который вы используете, IS FileSystemresource.
После понимания класса ресурсов, описанного выше. Давайте еще раз проясним, что если значение имени не установлено в @PropertySource, правило имени генерации значения: Найдите окончательный подкласс с инкапсулированным ресурсом на основе значения значения, а затем вызовут метод GetDescription в конкретном объекте экземпляра ресурса. Возвращаемое значение метода GetDescription - это конечное значение имени.
Например, метод GetDescription в классе ClassPathresource реализован следующим образом:
public String getDescription () {StringBuilder Builder = new StringBuilder ("Class Path Resource ["); String pathtouse = path; if (this.clazz! = null &&! pathtouse.startswith ("/")) {builder.append (classutils.classpackageasresourcepath (this.clazz)); Builder.Append ('/'); } if (pathtouse.startswith ("/")) {pathtouse = pathtouse.substring (1); } Builder.Append (Pathtouse); builder.append (']'); return Builder.toString ();} Приведенная выше логика обработки имен может быть временно впечатлена, и исходный код будет подробно отслеживается для объяснения в будущем.
1.2. Свойства аннотации загружают указанный тест на файл свойств
В вышеперечисленном мы настроили аннотацию свойств для загрузки файла "classpath:config/jdbc-bainuo-dev.properties" . Структура каталога этого файла показана на рисунке ниже:
Содержание файла jdbc-bainuo-dev.properties заключается в следующем:
Spring.datasource.shareniu.url = Shareniu
Содержимое файла Application.properties заключается в следующем:
Spring.profiles.active = dev
В приведенном выше файле конфигурации spring.profiles.active свойство настраивает текущую используемую среду Dev. spring.datasource.shareniu.url - это просто обычная собственность и не имеет особого значения само по себе.
Давайте начнем писать класс стартапов Springboot следующим образом:
@Springbootapplicationpublic class demoapplication {public static void main (string [] args) {SpressApplication SpressApplication = New SpressApplication (demoApplication.class); ConfigurableApplicationContext configurableApplicamationContext = SpringApplication.Run (args); Customerdatasourceconfig1 customerdatasourceconfig = configurableapplicationcontext .getbean (customerdatasourceconfig1.class); System.out.print (customerdatasourceconfig);}} Запустите приведенный выше код, и вывод программы выглядит следующим образом:
CustomerdatasourceConfig {url = 'null'} Странно, почему URL пуст? Разве аннотация недвижимости уже не загрузила файл jdbc-bainuo-dev.properties в текущую среду? С таким же успехом мы могли бы попытаться посмотреть, можно ли получить свойство spring.datasource.shareniu.url в jdbc-bainuo-dev.properties , а затем подтвердим, что аннотация свойств в текущей среде загрузила файл jdbc-bainuo-dev.properties в текущую среду.
Измените код приведенного выше класса запуска следующим образом:
@Springbootapplicationpublic class demoapplication {public static void main (string [] args) {SpressApplication SpressApplication = New SpressApplication (demoApplication.class); ConfigurableApplicationContext configurableApplicamationContext = SpringApplication.Run (args); Customerdatasourceconfig1 customerdatasourceconfig = configurableapplicationcontext.getbean (customerdatasourceconfig1.class); String property = configurableapplicationcontext.getenvironment (). GetProperty ("Spring.Datasource.shareniu.url"); System.out.println (Property); System.out.print (customerdatasourceconfig);}} Запустите приведенный выше код, и вывод программы выглядит следующим образом:
Шарениу
Из приведенного выше кода мы видим, что недвижимость действительно эффективна. Итак, как мы автоматически вводите spring.datasource.shareniu.url .
1.3. Аннотация свойств считывает указанный файл и вводит свойства в класс конфигурации
Spring предоставляет @value Annotation для чтения значений атрибутов в файле конфигурации и установить их в соответствующие атрибуты. Здесь мы узнаем, как использовать аннотацию @value. То же самое относится и к двум классам в приведенном выше тексте в качестве примеров подробных объяснений. Во -первых, вам нужно изменить класс CustomerDatasourceConfig1. Часть модификации заключается в следующем:
@Component@propertysource (name = "jdbc-bainuo-dev.properties", value = {"classpath: config/jdbc-bainuo-dev.properties"}, игнорирование. @Value ("$ {spring.datasource.shareniu.url}") private String url;} В приведенном выше классе аннотация @Value добавляется в поле URL, а выражение SPEL определяется как ${spring.datasource.shareniu.url} . Снова запустите класс Springboot Boot, а вывод консоли - Shareniu. Это указывает на то, что инъекция значений атрибутов действительно может быть сделана через @Value. Тем не менее, один из менее дружелюбных аспектов использования метода аннотации @Value заключается в том, что при наличии большого количества свойств в проекте для конфигурации нам нужно добавить аннотацию @Value в поля класса один за другим, что действительно сложно, но мы можем решить эту проблему через аннотацию @ConfigurationProperties, предоставленную SpringBoot.
1.4. ConfigurationProperties Annotation Использование
@ConfigurationProperties-это аннотация на уровне класса, и конкретное использование следующего:
Component @configurationProperties (prefix = "spring.datasource.shareniu") @propertysource (name = "jdbc-bainuo-dev.properties", value = {"classpath: config/jdbc-bainuo-dev.properties"}, IgnereSourcenOtfound = encoDing = "utf-8 incoDing =" uncoDing = "uncoding =" uncoding = "uncoding =" uncoding = "uncoding =" uncoding = "uncoding = encoding =" utf-8 incoding = "utf-8 incoding =" ut-itferties ". Customerdatasourceconfig1 {private String url; } В приведенном выше коде аннотация ConfigurationProperties добавляется в класс CustomerDatasourceConfig1, а префикс свойства - spring.datasource.shareniu . Таким образом, при обработке Springboot он сканирует все поля в текущем классе, а также поиск и сборка свойств. Например, если мы настроим prefix = "spring.datasource.shareniu" , в классе Customerdatasourceconfig1 существует поле URL, то атрибут, который необходимо соответствовать для URL -поля, - Prefix+ Field = spring.datasource.shareniu.url .
Это не только вопрос? Что если указанное поле не найдет атрибут? Это можно настроить следующим образом:
@ConfigurationProperties (prefix = "spring.datasource.shareniu", игнорировать
Игнорировать, игнорируйте неизвестные поля.
IgnoreInvalidfields: игнорировать поля, которые не могли проверить. Как вы это понимаете? Например, если мы настроим переменную типа строки в файле конфигурации, а поля в классе имеют тип int, она обязательно сообщит об ошибке. Если это произойдет, мы можем терпеть, что значение свойства должно быть настроено на True. Это значение параметра по умолчанию по умолчанию.
Эта статья объяснит здесь. В последующей статье мы объясним, как аннотация @propertySource может реализовать чтение файлов конфигурации в разных средах. Файлы в разных средах динамически переключаются на чтение. Свойство не поддерживается по умолчанию, поэтому нам необходимо расширить исходный код, соответствующий этой аннотации.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.