配置文件的那点事

1.配置文件

配置文件在web工程中已经是屡见不鲜了,比如数据源的配置,谁都会想到放到配置文件中。 Spring中有个<context:property-placeholder location=""/>标签,可以用来加载properties配置文件,location是配置文件的路径。看下面的例子:

<!-- 加载配置属性文件 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath:config.properties" />

<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}" />  
    <property name="jdbcUrl" value="${jdbc.url}" />  
    <property name="user" value="${jdbc.username}" />  
    <property name="password" value="${jdcb.password}" />  
 </bean>

配置文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

2.多环境

上面的例子很好的解决了开发中的配置问题,然而在实际工程中还有涉及多环境的情况。开发环境,测试环境,线上环境等。我们希望连配置文件都懒得改,毕竟在发布的时候程序猿和运维还要沟通一次,可能粗心的程序猿忘掉了什么配置要改结果一群人都要加班,这是我不乐见的。

spring3给我们提供了profile,每个环境一个配置文件,这就不用改来改去了。来看看这个例子:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx    
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ">
    
    <import resource="spring-db1.xml"/>
    <import resource="spring-db2.xml"/>
    <import resource="spring-db3.xml"/>
    <import resource="spring-dao.xml"/>
    <import resource="spring-dubbo.xml"/>
    
    <beans profile="default">
        <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
              <property name="fileEncoding" value="utf-8"/>
              <property name="location" value="classpath:config.properties"/>
        </bean>
    </beans>
    
    <beans profile="test">
        <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
              <property name="fileEncoding" value="utf-8"/>
              <property name="location" value="classpath:config-test.properties"/>
        </bean>
    </beans>
    
     <beans profile="online">
        <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
              <property name="fileEncoding" value="utf-8"/>
              <property name="location" value="classpath:config-online.properties"/>
        </bean>
    </beans>
 
</beans>

注意:profile的定义一定要在文档的最下边,否则会有异常

激活profile:有多重方式,可以在web.xml中初始化参数,也可以添加JVM参数,junit单元测试的时候则使用注解

web.xml方式如下

<init-param>
  <param-name>spring.profiles.active</param-name>
  <param-value>online</param-value>
</init-param>

推荐JVM参数方式:建议这种方式设置,tomcat 中 catalina.bat(.sh中不用“set”) 添加JAVA_OPS

set JAVA_OPTS="-Dspring.profiles.active=test"

3.配置中心

有了多环境的配置看起来已经非常完美了,事实如此。但是在一个企业当中,难免会有一大堆的项目,各种数据源,定时任务,缓存等等。运维的同学们表示:咱们的头很大,我的有道云笔记里面全是各种项目的记录,见鬼去吧!

所以这里就不得不讲一下配置中心了。这里推荐一种:taobao diamond, 具体怎么用百度吧~~,因为它是一个独立的项目,这里我就不写了。

原文地址:https://www.cnblogs.com/itechpark/p/yinzei_properties.html