spring加载一个或者多个properties配置文件方法

在项目中有些参数需要经常修改,或者后期需要修改,比如IP,调用别人的接口地址,数据库地址及帐号密码等,那么我们就不能把这些参数写死在代码里,虽然也可以在代码里改,但是如果是不懂代码的运维人员去现场部署项目又怎么改你的代码,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便。

以配置数据库举例:

我们以Spring实例化dataSource为例,一般我们会这样配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
    <property name="driverClass" value="com.mysql.jdbc.Driver" />  
    <property name="jdbcUrl" value="jdbc\:mysql\://192.168.0.108\:3306/maintance?useUnicode\=true&characterEncoding\=UTF-8" />  
    <property name="user" value="root" />  
    <property name="password" value="123456" />  
</bean> 

这样写可以,但是去甲方现场部署项目时,帐号,密码更改了,你就去需要去源代码里改,程序员改起来也方便,但如果是不懂代码的运维人员去部署呢。。。。所以如果使用properties文件的话,只需要修改那里面的即可,就不管源代码的东西了。

先看看properties文件长什么样:


你只要告诉运维人员这个db.properties文件在什么地方,进去改就可以了,而且一目了然。

那么接下来就是spring怎么去读取一个properties文件,只需要在spring的配置文件applicationContext.xml加上:

<!-- 加载配置文件(classpath就是告诉它项目的根目录下,这句话就意思就是去项目根目录下去读取db.properties文件)--> 
<context:property-placeholder location="classpath:db.properties" /> 

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		  init-method="init" destroy-method="close">
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>

注意:classpath;db.properties这里的地址别写错了,不然会报java.io.FileNotFoundException,文件找不到错误,以我的项目为例(maven项目),截图项目目录层级,做参考


以上是引入一个properties文件的例子,那如果引入两个properties文件怎么办呢

<context:property-placeholder location=""/>标签也可以用<bean>标签来代替,<bean>标签我们更加熟悉,可读性更强:

当存在多个Properties文件时,配置就需使用locations了,接下来我们要使用多个PropertyPlaceholderConfigurer来分散配置,来整合工程下的多个分散的Properties文件

举例,项目中既要引入数据库配置文件---->db.proerties文件,也要引入redies相关配置文件---->redies-config.properties

其中order属性代表其加载顺序,而ignoreUnresolvablePlaceholders为是否忽略不可解析的Placeholder,如配置了多个properties,则需设置为true

<bean id="PropertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
	    <property name="order" value="1" />  
	    <property name="ignoreUnresolvablePlaceholders" value="true" />  
	    <property name="locations">  
	      <list> 
	        <!--读取src目录的db.properties文件--> 
	        <value>classpath:db.properties</value> 
	        <!--读取src目录的redis-config.properties文件-->  
	        <value>classpath:redis-config.properties</value>  
	      </list>  
	    </property>  
	</bean>

dataSource的配置不变,还是这样配

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		  init-method="init" destroy-method="close">
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>

	</bean>

接下来redies读取的redies-conifg.properties文件了,这里只是举例子说明多个properties怎么配置加载,下面redies的参数配置就不多说明了。

<!-- spring自己的缓存管理器,这里定义了缓存位置名称 ,即注解中的value -->  
     <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">  
         <property name="caches">  
            <set>  
                <!-- 这里可以配置多个redis -->
                <!-- <bean class="com.cn.util.RedisCache">  
                     <property name="redisTemplate" ref="redisTemplate" />  
                     <property name="name" value="default"/>  
                </bean> -->  
                <bean class="org.zgr.pack.util.RedisCache">  
                     <property name="redisTemplate" ref="redisTemplate" />  
                     <property name="name" value="common"/>  
                     <!-- common名称要在类或方法的注解中使用 -->
                </bean>
            </set>  
         </property>  
     </bean>  
     
     
       <!-- redis 相关配置 -->  
     <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
         <!-- 最大空闲连接数 -->  
         <property name="maxIdle" value="${redis.maxIdle}" />
         <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->   
         <property name="maxWaitMillis" value="${redis.maxWait}" />  
         <!-- 在获取连接的时候检查有效性, 默认false -->
         <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
     </bean>  

     <bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  
       p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>  
  
     <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
         <property name="connectionFactory" ref="JedisConnectionFactory" />  
     </bean> 




  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值