Главная » Spring » Переопределение  свойств Spring

0

Другой подход к импортированию внешних настроек, поддер- живаемый фреймворком Spring, заключается в переопределении значений свойств компонентов с помощью файлов свойств. В этом случае переменные-заполнители не требуются. Вместо этого свой- ства компонентов либо связываются со значениями по умолчанию, либо вообще оставляются несвязанными. Если внешнее объявление свойства соответствует свойству компонента, для его инициализа- ции используется внешнее значение.

Например, рассмотрим компонент dataSource, настраивавшийся выше с помощью механизма подстановки переменных-заполните-

лей. Его первоначальное объявление с жестко определенными зна- чениями свойств выглядело, как показано ниже:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="org.hsqldb.jdbcDriver" p:url="jdbc:hsqldb:hsql://localhost/spitter/spitter" p:username="spitterAdmin"

p:password="t0ps3cr3t" />

В предыдущем разделе было показано, как объявлять значения по умолчанию с помощью элемента <util:properties> и механизма под- становки переменных-заполнителей. В отличие от него, механизм переопределения свойств позволяет оставить значения по умолча- нию в свойствах, а об остальном он позаботится сам.

Настройка механизма переопределения свойств выполняется практически так же, как настройка механизма подстановки пере- менных-заполнителей. Разница лишь в том, что вместо элемен- та <component:property-placeholder> используется элемент <component: property-override>:

<context:property-override location="classpath:/db.properties"   />

Чтобы механизм переопределения свойств смог сопоставить клю- чи в файле db.properties со свойствами компонентов в контексте приложения Spring, идентификаторы компонентов и имена свойств должны отображаться на ключи свойств в файле, как показано на рис. 17.1.

Как видите, ключ свойства во внешнем файле состоит из иден- тификатора компонента и имени свойства, разделяемых точкой. Ес-

Рис. 17.1. Механизм переопределения свойств определяет, какие свойства компонентов должны быть переопределены, отображая ключи

в файле свойств на идентификаторы компонентов и имена их свойств

ли вернуться к началу раздела 17.1, можно заметить, что ключи в файле db.properties были достаточно близки к этому требованию, но не соответствовали ему полностью. Все ключи свойств начинались с префикса jdbc., вследствие чего они могли бы быть использова- ны, только если бы компоненту источника данных был присвоен идентификатор jdbc. Но он имеет идентификатор dataSource, поэтому необходимо внести некоторые изменения в файл db.properties:

dataSource.driverClassName=org.hsqldb.jdbcDriver dataSource.url=jdbc:hsqldb:hsql://localhost/spitter/spitter dataSource.username=spitterAdmin dataSource.password=t0ps3cr3t

Теперь ключи в файле db.properties соответствуют свойствам ком- понента dataSource. В отсутствие файла db.properties будут задейство- ваны значения свойств, явно указанные в конфигурационном фай- ле. Но если файл db.properties присутствует и содержит только что представленные определения значений свойств, эти значения будут иметь более высокий приоритет, по сравнению со значениями в кон- фигурационном XML-файле.

Возможно, вам будет интересно узнать, что элемент <context: property-override> может настраиваться тем же набором атрибутов, что и элемент <context:property-placeholder>. Значения свойств по умолчанию можно точно так же настроить с помощью элемента

<util:properties>  и точно так же обеспечить получение значений из системных свойств.

К настоящему моменту вы познакомились с двумя механизмами импортирования значений свойств. Теперь вы легко сможете изме- нить URL базы данных или пароль, не пересобирая приложение и не разворачивая его повторно. Но осталось еще кое-что. Даже при том, что теперь пароль к базе данных отсутствует в определении контек- ста Spring, он все еще находится в открытом виде в файле свойств. Поэтому посмотрим, как использовать механизмы подстановки переменных-заполнителей и переопределения свойств из проекта Jasypt, чтобы зашифровать пароль, хранящийся во внешнем файле.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии