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

2023-11-12

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




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • QT学习——Qt工具介绍,Qt助手使用,第一个Qt程序,Qt字符串和字符编码

    一 Qt主要工具介绍 1 qt助手 assistant 2 qt构建器 qmake 3 qt设计师 designer 4 qt转换器 uic 5 qt资源编译器 rcc 6 qt元对象编译器 moc 处理语法扩展 7 qt创造器IDE qt
  • 线程安全:同步代码块

    一 线程安全 如果多个线程在同时运行 而这些线程可能会同时运行这段代码 程序每次运行结果和单线程的结果一样的 而且其他的变量的值和预期的是一样的 就是线程安全的 public class Ticker implements Runnable
  • 嵌入式编写TCP连接过程

    先来一个三次握手和四次挥手 嵌入式连接过程 1 af 为地址族 Address Family 也就是 IP 地址类型 常用的有 AF INET 和 AF INET6 AF 是 Address Family 的简写 INET是 Inetnet
  • Python爬虫常用库及解析库解析

    作者 禅与计算机程序设计艺术 1 简介 随着互联网的快速发展 越来越多的人开始使用网络购物 网络交易 微博阅读等方式进行日常生活 然而在这样的大环境下 如何从海量的数据中提取有价值的信息并有效整合到一起成为困难重重的事情 作为一名具有高度职
  • java jsp公共异常页面_JSP页面的异常处理

    对于jsp页面错误处理这里大致有两种方式 一 在Web xml中配置全局的错误异常处理 即凡是该项目下 即虚拟路径下的所有文件 的任意一个文件错误或者异常 都会跳到指定的错误处理页面 全局的错误处理可以处理两种类型的错误 一种是HTTP代码
  • gin框架10--XML/JSON/YAML/ProtoBuf 渲染

    gin框架10 XML JSON YAML ProtoBuf 渲染 介绍 案例 说明 介绍 本文主要介绍gin 中的 XML JSON YAML ProtoBuf 等常见渲染方法 以及其测试结果 案例 源码 package main imp
  • 构造任意多个HashCode相同的字符串

    在Java中字符串的HashCode的实现如下 JDK8 public int hashCode int h hash if h 0 value length gt 0 char val value for int i 0 i lt val
  • Spark提交参数说明和常见优化

    会用spark 会调api和能用好spark是两回事 在进行开发的过程中 不仅要了解运行原理 还要了解业务 将合适的方法和业务场景合适的结合在一起 才能发挥最大的价值 spark submit 进入spark的home目录 执行以下命令查看
  • macOS通过钥匙串访问找回WiFi密码的详细教程

    如果您忘记了Mac电脑上的WiFi密码 可以通过钥匙串访问来找回它 具体步骤如下 1 打开Mac电脑的 启动台 然后在其他文件中找到 钥匙串访问 2 运行 钥匙串访问 应用程序 点击左侧的 系统 然后在右侧找到要查看的WiFi网络名称 如果
  • 在linux上安装与卸载MySQL【非常详细】

    文章目录 一 安装MySQL 1 从网上下载文件的wget命令 2 下载MySQL的repo源 3 安装MySQL的rpm包 4 检查是否有两个repo源 5 安装MySQL 6 启动MySQL 7 登录MySQL 8 登录并切换数据库 查
  • Leetcode 题组 28

    112 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 判断该树中是否存在 根节点到叶子节点 的路径 这条路径上所有节点值相加等于目标和 targetSum 叶子节点 是指没有子节点的节点 示例 1 输入
  • java 在阻塞时终结学习笔记

    一个线程可以处于以下四种状态 1 新建 new 当线程被创建时 它只会短暂地处于这种状态 此时它已经分配了必需的系统资源 并执行了初始化 此时刻线程已经有资格获得CPU时间了 之后调度器将把这个线程转变为可运行状态或阻塞状态 2 就绪 Ru
  • Python机器学习(三)--决策树算法

    Python机器学习 三 决策树算法 原创 2014年07月14日 13 57 55
  • C语言中的fprintf和printf区别在哪?

    原型 fprintf的函数原型为 int fprintf FILE stream const char format argument 而printf的函数原型为 int printf const char format argument
  • uniapp使用绝对定位被父元素截断问题

    在做uniapp开发时真机运行的时候使用绝对定位 会被他限制在他整个的父元素之内 本来这两块是做了两个子组件 但是 点击问号的时候就会出现上述问题 弹框永远显示不全 解决方案 将这个弹框移到父组件中 如index vue 然后使用一个div
  • jdk下载百度云(windows×64-7,8,10)

    之前找了很久 好多都要很多积分 所以我就给大家整理到百度云盘 https pan baidu com s 1UgiZf6R8PNtnlTDNW N2Kw 提取码 o6cp
  • 只有持续的变革和创新才是CRM成功的关键

    这两年来 我目睹了众多的企业在进行CRM的尝试和体验 也亲历了众多的企业对CRM成功与失败的讨论 甚至于有很多关于CRM失败的项目和言论 让更多后面的企业停止了尝试的脚步 而这一切 不应该只归罪与一个CRM系统 或者一个CRM项目 而要更多
  • error: CreateProcess: No such file or directory的解决方法

    办公的笔记本上先装有qnxIDE的700环境 然后再用Eclipse 搭建了一个qnx710的环境 刚搭建完qnx710的时候是可以编译通过的 之后第二天再开机编译Eclipse 710就编译不过了 报错就是 error CreatePro
  • WiFi技术概述

    1 概述 WLAN是无线局域网络的简称 全称为Wireless Local Area Networks 是一种利用无线技术进行数据传输的系统 该技术的出现能够弥补有线局域网络之不足 以达到网络延伸之目的 Wi Fi是无线保真的缩写 英文全称
  • spring加载一个或者多个properties配置文件方法

    在项目中有些参数需要经常修改 或者后期需要修改 比如IP 调用别人的接口地址 数据库地址及帐号密码等 那么我们就不能把这些参数写死在代码里 虽然也可以在代码里改 但是如果是不懂代码的运维人员去现场部署项目又怎么改你的代码 那我们最好把这些参