PropertySourcesPlaceholderConfigurer Spring используется для вывода свойств из определений bean-компонентов Spring, определенных в XML, или с помощью Java Config. Есть несколько опций, которые поддерживает PlaceholderConfigurer, которые не очевидны из документации, но интересны и могут быть полезны.
Для начала, пример из документации Spring , рассмотрим файл свойств с информацией для настройки источника данных:
|
1
2
3
4
|
jdbc.driverClassName=org.hsqldb.jdbcDriverjdbc.url=jdbc:hsqldb:hsql://production:9002jdbc.username=sajdbc.password=root |
PropertySourcesPlaceholderConfigurer настраивается с использованием настраиваемого пространства имен:
|
1
|
<context:property-placeholder location='database.properties'/> |
Компонент источника данных, использующий эти свойства, может быть определен с помощью определения компонента на основе XML следующим образом:
|
1
2
3
4
5
6
7
|
<bean id='dataSource' destroy-method='close' class='org.apache.commons.dbcp.BasicDataSource'> <property name='driverClassName' value='${jdbc.driverClassName}'/> <property name='url' value='${jdbc.url}'/> <property name='username' value='${jdbc.username}'/> <property name='password' value='${jdbc.password}'/></bean> |
и используя конфигурацию на основе Java следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@Value('${jdbc.driverClassName}') private String driverClassName;@Value('${jdbc.url}') private String dbUrl;@Value('${jdbc.username}') private String dbUserName;@Value('${jdbc.password}') private String dbPassword;@Beanpublic BasicDataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(driverClassName); dataSource.setUrl(dbUrl); dataSource.setUsername(dbUserName); dataSource.setPassword(dbPassword); return dataSource;} |
Не очень очевидные варианты:
Во-первых, это поддержка значений по умолчанию. Скажем, к примеру, если для имени пользователя jdbc по умолчанию должно быть указано sa, способ сделать это следующим образом (используя синтаксис $ {propertyName: default}):
|
1
|
<property name='username' value='${jdbc.username:sa}'/> |
или с помощью Java Config:
|
1
2
3
4
5
6
7
8
|
....@Value('${jdbc.username:sa}') private String dbUserName;@Beanpublic BasicDataSource dataSource() {..} |
Во-вторых, это поддержка разрешения вложенных свойств, например, рассмотрим следующие свойства:
файл phase.properties —
|
1
2
3
|
phase=qajdbc.username.qa=qasajdbc.username.dev=devsa |
и используя свойство ‘phase’ как часть другого свойства в определении bean-компонента XML следующим образом:
|
1
|
<property name='username' value='${jdbc.username.${phase}}'/> |
Эти параметры могут быть очень полезны для конфигурации на основе заполнителя.
Ссылка: Spring Property Placeholder Configurer — Несколько не столь очевидных вариантов от нашего партнера JCG Биджу Кунджуммена в блоге all and sundry.