返回顶部

收藏

Spring 中注入bean的properties配置文件位置问题解决

更多

使用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>

标签:spring,properties,配置,依赖注入,java

收藏

0人收藏

支持

1

反对

0

相关聚客文章
  1. 博主 发表 2016-02-19 00:00:00 Spring Java-based配置
  2. 博主 发表 2013-07-01 14:53:15 Java中如何获取Spring中配置的bean
  3. root 发表 2015-04-15 04:04:01 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
  4. 博主 发表 2016-09-26 07:49:17 spring-session之3 redis配置参数配置
  5. 博主 发表 2016-03-28 12:58:40 Spring MVC 简单例子
  6. 博主 发表 2016-12-16 09:12:03 Spring中welcome-file-list不起作用问题分析
  7. 博主 发表 2016-06-23 07:59:57 RestTemplate实践
  8. 尖兵 发表 2017-12-18 15:09:03 spring data jpa 小结
  9. 漠然 发表 2015-07-18 05:47:11 Spring AOP笔记
  10. TiuVe2 发表 2018-02-10 12:45:29 Spring 中无处不在的 Properties
  11. 博主 发表 2018-01-27 14:54:24 Spring Boot 入门之消息中间件篇(五)
  12. yeseng 发表 2018-06-03 08:54:28 码云推荐 |基于 Spring Boot 的秒级定时任务管理