spring读取prperties配置文件(1)
博客地址http://www.cnblogs.com/shizhongtao/p/3438431.html
属性文件命名是*.properties,在java中,用类java.util.Properties来处理,例如我创建文件my.properties,然后加入属性
filename=你好
path=D\:\\app
那么在java中就可以这样读取属性
InputStream in=App.class.getResourceAsStream ("/my.properties"); Properties pro=new Properties(); try { pro.load(in); System.out.println(pro.getProperty("filename")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(in!=null){ try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
上面代码中只是读取了,其中的filename属性,不过会出现一个问题,就是中文乱码的问题,这是因为inputstream是按照字节流读取,每次读一个字节,而每个汉字是两个字节;所以会出现乱码,我们可以这样修改,(当然你也可以用fileReader这个类,因为FileREder用的是系统默认字符编码,只要你默认编码支持中文就可以了。)
new InputStreamReader(in,"utf-8"); pro.load(new InputStreamReader(in,"utf-8")); System.out.println(pro.getProperty("filename"));
在spring中,利用配置文件读取相应的配置,方便项目一些变量的修改,例如数据库配置、文件保存位置、类中不固定的一些变量值等等。
通常我们会建一个名字为db.propreties的属性文件。里面内容如下:
db.connection.driver_class=oracle.jdbc.driver.OracleDriver db.connection.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl db.connection.username=test db.connection.password=test
然后在spring中用PropertyPlaceholderConfigurer类来读取属性,这个类读取属性文件非常灵活,你可以配置编码 <property name="fileEncoding">来配置编码。具体使用可以参看官方的文档http://docs.spring.io/spring/docs/3.2.5.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-placeholderconfigurer
1 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 2 <property name="locations"> 3 <list> 4 <value>classpath:/db.properties</value> 5 </list> 6 </property> 7 </bean>
在spring2.5以后的版本中,读取属性文件也可以这样配置,与上面的效果一样。
<context:property-placeholder location="classpath:db.properties"/>
这样在我们配置数据库的dataSource时候就可以如下配置:
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>${db.connection.driver_class}</value> </property> <property name="url"> <value>${db.connection.url}</value> </property> <property name="username"> <value>${db.connection.username}</value> </property> <property name="password"> <value>${db.connection.password}</value> </property> </bean>
引申:如果想要PropertyPlaceholderConfigurer用anotation的方式,去注入属性,我们该如何写呢?