在项目中有些参数需要经常修改,或者后期需要修改,比如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> 

spring加载一个或者多个properties配置文件方法相关推荐

  1. spring加载jar包中多个配置文件(转)

    转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <co ...

  2. spring加载jar包中多个配置文件

    转自:http://www.cnblogs.com/GarfieldTom/p/3723915.html <import resource="classpath*:applicatio ...

  3. Spring加载properties文件的两种方式

    2019独角兽企业重金招聘Python工程师标准>>> 在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取pro ...

  4. springboot 加载一个properties文件转换为对象、List和Map数据结构

    springboot 加载一个properties文件转换为对象.List和Map数据结构 一.springboot 加载一个properties文件转换为对象 1.1.配置文件-blog.prope ...

  5. java配置文件实现方式_java相关:详解Spring加载Properties配置文件的四种方式

    java相关:详解Spring加载Properties配置文件的四种方式 发布于 2020-4-29| 复制链接 摘记: 一.通过 context:property-placeholder 标签实现配 ...

  6. Java动态加载一个类的几种方法以及invoke

    一.加载一个类的几种方法 接口 IUser package org.me.javaapp;/**** @author Administrator*/ public interface IUser {} ...

  7. Spring加载流程源码

    一.从AbstractApplicationContext的体系说起 第一,从类结构设计上看, 围绕着是否需要Refresh容器衍生出两个抽象类: GenericApplicationContext: ...

  8. Spring 加载、解析applicationContext.xml 流程

    概要 Spring 框架使用了BeanFactory 进行加载 xml 和生成 bean 实例.下面我们分析下Spring加载xml文件的过程. spring 版本是最新的 4.3.9 release ...

  9. java类spring加载_spring的加载机制?

    1,今天面试官问我spring的加载机制有哪些---这么"抽象"的问题作为一个十多年经验的自己写过MVC,IOC,ORM, 等各种中间件小框架的开发人员也回答不出来~ 确切的说是无 ...

最新文章

  1. 剑指offer-反转链表
  2. python模块cv2人脸识别_python face_recognition模块实现人脸识别
  3. 函数形参传递概念及问题分析
  4. [复习]莫比乌斯反演,杜教筛,min_25筛
  5. go语言 slice
  6. cacti mysql-bin_Cacti环境搭建(LNMP环境)
  7. opencv之解决对加载图片大小限制的问题
  8. 查询SQLServer 服务器,执行过的SQL语句耗时!
  9. 演示辅助软件 ZoomIt 的使用
  10. 获取字符串中 图片路径
  11. LabVIEW创建的PDA应用程序不是一个合法的Pocket PC应用程序
  12. 一步控制台编译java_在控制台运行一个 Java 程序 Test . class ,使用的命令正确的是( )_学小易找答案...
  13. 宏碁掠夺者Predator首款RGB内存条即将发售,特挑三星B-Die颗粒
  14. js实现仿微信红包随机分配
  15. 分析智联招聘的API接口,进行数据爬取
  16. nrf51822 52832学习汇总
  17. sift算法_论文和专利笔记:翻拍检测算法
  18. ifconfig eth0 down禁用网卡操作致使ssh连接不上,ping不通机器
  19. AvanWaves软件打开的时候出现License error-check flexlm.log的解决方法
  20. 如何上好大学计算机基础,如何学好大学计算机基础

热门文章

  1. 打印机服务无法启动 错误代码1068
  2. 教你怎么添加自己QQ为QQ好友 最新方法
  3. 强化学习(二)--让你轻松玩转生成对抗网络(GAN)与生成对抗模仿学习(GAIL)
  4. 【算法】求解钱币兑换问题
  5. 【算法】求解最大连续子序列和的问题
  6. HTML做网页登录界面
  7. 基于keras的seq2seq中英文翻译实现
  8. ROS1云课→17化繁为简stdr和f1tenth
  9. TUP:分享产品背后的技术和用户体验
  10. 执行命令hadoop version出现错误