使用PropertyPlaceholderConfigurer类载入外部配置

在Spring项目中,你可能需要从properties文件中读入配置注入到bean中,例如数据库连接信息,memcached server的地址端口信息等,这些配置信息最好独立于jar包或者war包,这样便于修改配置。Spring提供了PropertyPlaceholderConfigurer类来处理这件事情。

例如,要载入配置文件中的mysql配置信息:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mypage
jdbc.username=root
jdbc.password=123456
我们需要在spring配置文件中定义PropertyPlaceholderConfigurer的location属性,这个location指向配置文件的位置: <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="location" value="file:${APP_HOME}/conf/mypage.properties"/>
</bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
在上面的例子中PropertyPlaceholderConfigurer类的systemPropertiesModeName的属性是SYSTEM_PROPERTIES_MODE_OVERRIDE这意味着可以从jvm虚拟机的参数中获得配置信息。 配置location的值中的${APP_HOME}可以根据环境不同设置不同的值,例如在开发环境,设置开发环境的目录,而在线上环境就要配置线上配置文件的路径了。 对于jar包文件,需要在启动jar包时指定APP_HOME的值,例如: java -classpath test.jar -DAPP_HOME=/data0/conf cn.outofmemory.App
而对于运行在tomcat容器中的war包,需要修改下tomcat目录下的bin/catalina.sh文件,在此文件中添加或者修改如下变量的值: JAVA_OPTS="-Xms2560m -Xmx5120m -DAPP_HOME=/application/outofmemory.cn/conf/"
注意-Xms2560m -Xmx5120m是为了修改虚拟机的内存值,-DAPP_HOME才影响配置文件位置。 给PropertyPlaceholderConfigurer指定必要的属性之后就可以通过${variable}的形式将配置文件中的值植入到bean中了。 如果你希望将配置文件放在jar包或者war包内,那么需要将location中的file:去掉,例如在war包中通常会放在/WEB-INF/conf路径下,那么可以这么写: <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="location" value="/WEB-INF/conf/mypage.properties"/>
</bean>

最新文章

  1. android handler ,message消息发送方式
  2. ORACLE清理、截断监听日志文件(listener.log)
  3. php 读取json数据文本所遇到的问题
  4. 浅入浅出EmguCv(三)EmguCv打开指定视频
  5. python核心编程(第二版)习题
  6. Web前端开发基础 第四课(盒代码模型)
  7. 关于Redis info的参数总结
  8. Spark Streaming揭秘 Day18 空RDD判断及程序中止机制
  9. CSS浮动、绝对、相对定位
  10. 基于RC4加密算法的图像加密
  11. Wannafly挑战赛26 B 冥土追魂
  12. beanshell获取响应结果数据
  13. nodejs图片总结
  14. Linux期中架构 全网备份案例
  15. 剑指offer四十七之求1+2+3+...+n
  16. Controller层@PathVariable使用
  17. 将UIView转成UIImage,将UIImage转成PNG/JPG
  18. kafka producer自定义partitioner和consumer多线程
  19. DenyHosts 阻止SSH暴力攻击
  20. 面试题:判断两个字符串是否互为回环变位(Circular Rotaion)

热门文章

  1. tomcat中AJP协议和HTTP协议的区别
  2. elasticsearch中query和filter的区别
  3. linux主机连接sftp报错received unexpected end-of-file from SFTP server
  4. List&lt;List&lt;Object&gt;&gt; list = new ArrayList&lt;List&lt;Object&gt;&gt;(); 求回答补充问题 list.get(position).add(Object);为什么会报错啊我想在对应的list里面添加对象
  5. Python之浅谈继承
  6. Markdown小白教学15分钟速成
  7. Mysql百万级数据查询优化
  8. css重设样式_清除浏览器的默认样式
  9. CSS3 target 选择器_:target伪类的使用
  10. 51nod1524 最大子段和V2