在进行数据源的连接URL,用户名,密码这些配置的时候,可以直接在spring的配置文件中配置
,但是另一种更好的方法是将这些配置信息独立到一个外部属性文件中,并在spring配置文件
中通过${url}等占位符引用属性文件中的属性项,这种配置方式的好处如下:
1.减少维护的工作量。
2.使部署更简单。
spring为我们提供了一个PropertyPlaceholderConfigurer,它能够使bean在配置时引用外部属
性文件。PropertyPlaceholderConfigurer实现了BeanFactoryPostProcessorBean接口,因此也
是一个Bean工厂后处理器。
以下通过一个实例说明:
现有一个pojo类:org.huang.connection.java
public class Connection {
public String url;
public String username;
public String password;
//set/get方法省略
}
在相同目录下建立connection.property文件,其内容如下:
url=jdbc:oracle:thin:@localhost:1521
username=zhansan
password=lisi
在工程中引入spring的包,然后在applicationContext.xml中利用PropertyPlaceholderConfigurer引入这个配置文件,并在配置Connection Bean时通过占位符引用属性文件中的属性项。具体配置如下:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:org/huang/connection.properties</value>
</list>
</property>
<property name="fileEncoding" value="utf-8"></property>
</bean>
<bean id="connection" class="org.huang.Connection">
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
在以上配置中,通过locations属性制定属性文件的位置。locations属性的类型为Resource[],所以用户可以在地址前指定资源类型前缀。如果要引用多个属性文件,只需添加多个<value>配置项即可。
然后写client.java,内容如下:
public static void main(String[] args) {
BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
Connection connection=(Connection) factory.getBean("connection");
System.out.println(connection.getUrl());
System.out.println(connection.getUsername());
System.out.println(connection.getPassword());
}
可以看到控制台打印如下:
jdbc:oracle:thin:@localhost:1521
zhansan
lisi
PropertyPlaceholderConfigurer其他属性
除了必不可少的locations属性外,PropertyPlaceholderConfigurer还有一些常用的属性,在一些高级应用中,这些属性可以提供帮助:
— location:如果只有一个属性文件,也通过使用这个属性进行设置,locations属性用于设置多个属性文件;
— fileEncoding:属性文件的编码格式,Spring缺省使用操作系统默认编码读取属性文件,如果属性文件采用了特殊编码,需要通过该属性显式指定;
— order:如果配置文件中定义了多个PropertyPlaceholderConfigurer,通过该属性指定调用的顺序;
— placeholderPrefix:在这上面的例子中,我们通过${属性名}引用属性文件中的属性项,其中“${”为默认的占位符前缀,可以根据需要改为其他的前缀符;
— placeholderSuffix:占位符后缀,默认为“}”。