Spring属性占位符配置器–一些不太明显的选项

Spring的PropertySourcesPlaceholderConfigurer用于从XML或Java Config中定义的Spring bean定义外部化属性。 PlaceholderConfigurer支持的一些选项在文档中并不明显,但是很有趣并且可能有用。

首先,以Spring文档中的示例为例,考虑一个属性文件,其中包含用于配置数据源的信息:

jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root

使用自定义名称空间配置PropertySourcesPlaceholderConfigurer:

<context:property-placeholder location='database.properties'/>

可以通过以下方式使用基于XML的bean定义来定义利用这些属性的数据源bean:

<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的配置:

@Value('${jdbc.driverClassName}') private String driverClassName;
@Value('${jdbc.url}')             private String dbUrl;
@Value('${jdbc.username}')        private String dbUserName;
@Value('${jdbc.password}')        private String dbPassword;

@Bean
public BasicDataSource dataSource() {
 BasicDataSource dataSource = new BasicDataSource();
 dataSource.setDriverClassName(driverClassName);
 dataSource.setUrl(dbUrl);
 dataSource.setUsername(dbUserName);
 dataSource.setPassword(dbPassword);
 return dataSource;
}

不太明显的选项是:

首先是对默认值的支持。 例如,如果要为jdbc用户名默认提供“ sa”,则使用这种方法(使用$ {propertyName:default}语法):

<property name='username' value='${jdbc.username:sa}'/>

或使用Java Config:

..
..
@Value('${jdbc.username:sa}') private String dbUserName;

@Bean
public BasicDataSource dataSource() {
..
}

其次是对嵌套属性解析的支持,例如考虑以下属性:

phase.properties文件–

phase=qa
jdbc.username.qa=qasa
jdbc.username.dev=devsa

并以这种嵌套方式将'phase'属性用作XML bean定义中另一个属性的一部分:

<property name='username' value='${jdbc.username.${phase}}'/>

这些选项对于基于占位符的配置可能非常有用。

参考: Spring Property占位符配置器– all和杂物博客中,我们的JCG合作伙伴 Biju Kunjummen提供了一些不太明显的选择

翻译自: https://www.javacodegeeks.com/2013/01/spring-property-placeholder-configurer-a-few-not-so-obvious-options.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值