`

Spring property文件配置方法以及如何与工程分离

阅读更多

1,Spring使用property文件作为配置源

   工程中难免出现一些需要每次部署都需要配置的参数,如数据源连接参数等,测试环境跟实际运行环境是不一样的。

   使用spring框架的话,这些参数可能独立分布在不同的springContex配置文件里面。

   可以考虑将这些参数独立到一个配置文件并可以让spring方便加载注入。可选的一个方案是使用java的property文件,将所有的配置参数都写到property文件里面,使用${key}来在spring配置文件里面得到这个参数。

例子:

property文件global-config-file.properties:

 

#FOR dataSource
jdbc.dataSource.url=jdbc:postgresql://192.168.1.118:5432/DB_name
jdbc.dataSource.username=postgres
jdbc.dataSource.password=123

 

示例配置的是数据源参数。

 

之后在springContext的配置文件中,加入下面代码,

 

	<bean id="propertyConfigurer"  
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="location" value="classpath:global-config-file.properties"/>  
    </bean> 

   即引入PropertyPlaceholderConfigurer来读取property配置文件,spring框架会从其那里获取到需要的配置参数。

 

 

之后再用${key}的格式取代你数据源配置参数:

 

<bean id="myBatisDataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="org.postgresql.Driver">
		</property>
		<property name="url"
			value="${jdbc.dataSource.url}">   
		</property>
		<property name="username" value="${jdbc.dataSource.username}"></property>
		<property name="password" value="${jdbc.dataSource.password}"></property>
	</bean>

 例如:${jdbc.dataSourcurl}:框架会将global-config-file.properties读到jdbc.dataSource.url的值“jdbc:postgresql://192.168.1.118:5432/DB_name”填入${jdbc.dataSource.url}所在的位置。

 

 

 

 

 

2,将property配置文件与工程分离(独立到服务器中)

   为什么想到要这样做呢?

   这是在实际开发部署中,每次将工程打包部署到服务器,都需要在服务器端修改工程的配置项(如数据源等),感觉很麻烦。

   如果工程优先读取放置在服务器上的配置文件,没有此配置文件才从工程目录里面读取,那样就可以将只在服务器存放一份配置文件并修改成与服务器运行环境一致,今后部署即可不用每次都修改工程配置文件了。

2.1 做法:

  刚才我们在第1点添加了一个propertyConfigurer,现将其改名为“propertyConfigurer2”,并添加一个“propertyConfigurer1”,两者配置为:

 

<bean id="propertyConfigurer1"  
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="1"/>
         <property name="ignoreResourceNotFound" value="true"/>
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="location" value="file:C:/tempSys/config/global-config-file.properties"/>  
    </bean> 

	<bean id="propertyConfigurer2"  
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="order" value="2"/>
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="location" value="classpath:global-config-file.properties"/>  
    </bean> 

 order属性表示加载顺序,这种配置表示先加载propertyConfigurer1,在加载propertyConfigurer2,两者配置文件中有同样的参数,后加载的参数不会覆盖先加载的。

 

  propertyConfigurer1需要添加一个 <property name="ignoreResourceNotFound" value="true"/>属性,表示当找不到这个配置文件时,则跳过,这样就不会抛出FileNotFoundException了。

  这样配置之后,工程会在启动时,首先检查C:/tempSys/config/global-config-file.properties是否存在,如果存在则加载器配置,随后再加载项目目录下的global-config-file.properties;如果不存在,则直接加载项目目录下的global-config-file.properties。

   

   这样做不单可将配置与开发环境分离出来,避免每次部署时繁琐的配置修改工作。同时这也提高了系统部署时的安全性,比如,实际运行的正式数据库账户密码信息将是十分机密的信息,由运维人员保管维护,可能对开发人员都不能公开(开发人员只知道开发测试数据库的信息),将这些信息直接配置在服务器上,服务器也由运维人员进行管理,这样可以减少机密信息的知晓人群,提高安全性。

分享到:
评论
2 楼 bo_hai 2018-06-06  
<property name="location" value="file:C:/tempSys/config/global-config-file.properties"/> 


能否做到动态指定呢?
1 楼 liaozaiwang 2016-05-11  
        

相关推荐

    spring+maven项目工程

    开发者可以通过查看这些文件来学习如何设置Spring和Maven的项目结构,如何编写和组织代码,以及如何配置Spring的IOC和AOP功能。 总的来说,这个"spring+maven"项目工程是一个学习和实践Spring框架与Maven工具集成的...

    spring+freemark整合工程

    1. **配置FreeMarker**: 在Spring MVC项目中整合FreeMarker,首先需要在Spring配置文件中配置FreeMarkerViewResolver。这个配置告诉Spring MVC使用FreeMarker来渲染视图。例如: ```xml ...

    关于spring系统中多系统的配置

    这对于分离配置与代码、实现动态配置非常有用。 ### 基本使用方法 首先,来看一下如何使用`PropertyPlaceholderConfigurer`: ```xml class="org.springframework.beans.factory.config....

    spring+ibaitis+struts配置文件实例

    下面,我们将深入探讨这三个框架的配置文件以及如何将它们整合在一起。 1. **Struts配置文件(struts-config.xml)**:这是Struts的核心配置文件,定义了Action及其对应的ActionForm、ActionForward和数据源等。例如...

    快速搭建一个简易的spring web工程

    在src/main/webapp/WEB-INF/spring/appServlet目录下创建servlet-context.xml文件,配置Spring MVC的处理器映射器、视图解析器等: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi...

    spring整合mybatis的jar_spring+mybatis_

    - **Mapper接口未找到**:检查Mapper接口是否已正确扫描并注册到Spring容器中,以及Mapper接口与XML配置文件的namespace是否一致。 - **SQL语句错误**:确保SQL语句的编写无误,特别注意动态SQL的使用,避免语法...

    spring mvc工程创建过程详细.zip

    4. **创建Spring配置文件**:在WEB-INF目录下创建`web.xml`,这是Web应用的部署描述符,配置Spring MVC DispatcherServlet。 ```xml &lt;servlet-name&gt;dispatcher &lt;servlet-class&gt;org.springframework.web.servlet...

    Spring笔记.md

    在Spring框架中,AOP支持通过声明式的方式实现,即通过配置文件或注解来指定哪些方法需要被增强。 AOP的关键概念包括: - **切面**(Aspect):描述了对多个类型的行为封装。 - **连接点**(Join Point):程序...

    模拟spring ioc过程

    在Java工程中,我们通常会通过配置文件(如XML或Java配置类)来定义bean的定义和它们之间的依赖关系。在实际运行时,Spring容器会读取这些配置,根据定义创建并管理bean,这就是IOC的过程。 在IOC的实现中,Spring...

    Spring、mybatis、SpringMVC

    使用外部属性文件需要创建资源文件并引入外部属性文件,使用 @PropertySource 获取外部属性文件中的变量值。 Spring Boot 需要创建 Spring 项目,并选择依赖项,例如 MyBatis Framework 和 MySQL Driver。使用 @...

    tedu二阶段Spring课堂随手

    为了创建一个基于 Spring 的项目,首先需要添加 Spring Framework 的依赖到项目的构建配置文件中,例如 Maven 或 Gradle 文件。然后,定义一个配置文件(如 `applicationContext.xml`),并在其中声明 Spring 管理的...

    spring IOC AOP simulation.rar

    例如,在Spring XML配置文件中,可以定义bean及其属性,通过`&lt;bean&gt;`标签和`&lt;property&gt;`子标签进行配置。 **AOP(面向切面编程)**则是Spring提供的另一大特色功能,它允许开发者将关注点从业务逻辑中分离出来,...

    如何添加Spring功能 例子

    这里的"applicationContext.xml"是Spring的配置文件,它定义了bean及其依赖关系。 **3. 配置Bean** 在"applicationContext.xml"中,我们定义bean的ID、类名以及依赖关系。例如: ```xml &lt;property name=...

    java_spring_day05.pdf

    - 配置Hibernate与Spring的集成,包括SessionFactory、TransactionManager等。 - 使用`@Repository`、`@Service`、`@Controller`等注解来标记DAO层、Service层和控制层的类。 - 通过`@Autowired`注解自动装配依赖...

    springboot +jsp demo 工程

    SpringBoot + JSP Demo 工程是一个典型的Java Web应用程序示例,它利用Spring Boot的便捷性和JSP(JavaServer Pages)技术来构建动态网页。在这个项目中,Spring Boot作为核心框架,提供了快速开发Web应用的能力,而...

    Spring MVC整合 freemarker及使用方法

    2. 在springMVC-servlet.xml文件中添加ViewResolver配置:&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"&gt; &lt;property name="cache" value="true" /&gt; ...

    JSP软件工程案例精解

    11. **打包与部署**:学习如何使用WAR文件格式打包JSP项目,并将其部署到Tomcat、Jetty等Web服务器上,以及如何配置服务器环境。 通过《JSP软件工程案例精解》的学习,开发者不仅能掌握JSP的基本语法和使用技巧,还...

    springboot参考指南

    从Spring配置分离@Entity定义 v. 67.5. 配置JPA属性 vi. 67.6. 使用自定义的EntityManagerFactory vii. 67.7. 使用两个EntityManagers viii. 67.8. 使用普通的persistence.xml ix. 67.9. 使用Spring Data JPA和...

Global site tag (gtag.js) - Google Analytics