spring配置中,properties文件以及xml文件配置问题

spring方便我们的项目快速搭建,功能强大,自然也会是体系复杂!

这里说下配置文件properties管理的问题。

一些不涉及到代码逻辑,仅仅只是配置数据,可以放在xxxx.properties文件里面,项目功能复杂的时候,往往properties文件很多,这时,就比较容易让人困惑,有些properties的文件内容总是加载不起来,应用启动时,就不断爆出错误,说某某参数加载失败,这个是什么原因呢?

其实,这个是spring配置的时候,org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer这个bean只会被加载一次。在spring的xml配置文件中,多处出现这个bean的配置,spring加载的时候,只会加载第一个,后面的就加载不了。

如何解决呢?其实很简单,比如我的一个应用中,就有internal.properties和jdbc.properties两个文件。按下面这种方式就可以解决:

 1     <bean id="configRealm" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
 2          <property name="locations">
 3             <list>
 4                 <value>classpath:conf/internal.properties</value>
 5                 <value>classpath:conf/jdbc.properties</value>
 6             </list>
 7         </property>
 8     </bean>
 9      <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
10          <property name="properties" ref="configRealm"/>
11     </bean>

若有多个,可以在list中类似红色部分添加就可以了!

在这里,再多说一点,xml的配置问题,当然,不是功能问题,而是习惯问题!

大的基于spring的项目,往往有很多xml配置文件,比如DAO的,比如权限shiro的配置,比如redis的配置等等,在web.xml中的context-param字段,可以如下配置:

1    <context-param>
2         <param-name>contextConfigLocation</param-name>
3         <param-value>classpath:conf/spring-dao.xml,classpath:conf/spring-servlet.xml</param-value>
4     </context-param>

但是,更好的办法,是将一些应用模块的xml配置通过import resource的方式放在一个xml文件中,例如applicationContext.xml。比如,我的应用applicationContext.xml文件的内容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3        xmlns:context="http://www.springframework.org/schema/context"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xsi:schemaLocation="
 6    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 7    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 8
 9     <bean id="configRealm" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
10          <property name="locations">
11             <list>
12                 <value>classpath:conf/internal.properties</value>
13                 <value>classpath:conf/jdbc.properties</value>
14             </list>
15         </property>
16     </bean>
17      <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
18          <property name="properties" ref="configRealm"/>
19     </bean>
20
21     <import resource="applicationContext-springdata.xml"/>
22     <import resource="applicationContext-security.xml"/>
23     <import resource="applicationContext-ehcache.xml"/>
24     <import resource="applicationContext-task.xml"/>
25     <import resource="applicationContext-external.xml"/>
26     <import resource="applicationContext-message.xml"/> -->
27 </beans>

这个applicationContext.xml可以在web.xml中的context-param配置部分加载,如下:

1     <context-param>
2         <param-name>contextConfigLocation</param-name>
3         <param-value>classpath:conf/applicationContext.xml</param-value>
4     </context-param>

这样子,就会使得项目的配置文件结构非常的清晰!

时间: 2024-10-13 22:13:33

spring配置中,properties文件以及xml文件配置问题的相关文章

spring 的配置文件 是上个web.xml 加载spring容器中的/WEB-INF/application.xml 文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/sc

Spring Batch 简单应用 (三)(XML文件操作)

前篇关于Spring Batch的文章,讲述了Spring Batch 对CSV文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对XML文件的读写操作.实例流程是从一个XML文件中读取商品信息,经过简单的处理,写入另外一个XML文件中. 工程结构如下图: log4j.xml是log处理的配置文件,与本文没有必然联系,再此不做论述. application.xml文件内容如下: 按 Ctrl+C 复制代码 <?xml version="1.0"

配置ssm 时, web.xml 文件无 # 自动代码提示

环境:STS 版本:spring-tool-suite-3.8.1.RELEASE-e4.6-win32-x86_64 配置ssm 时, web.xml 文件无 如下图蓝色圈范围内的提示 问题与 链接 类似 后来在 链接 中 13楼 找到答案 解决方法如下: 在web.xml中先输入左尖括号(<),等提示框出来后,再删除这个符号,再在提示信息中翻到最下边儿就看到了. 原文地址:https://www.cnblogs.com/mumu122GIS/p/10012245.html

Android中java文件与XML文件的协作过程

android是使用XML布局文件来定义界面,不是用Java代码来定义界面,所以说所有组件都提供了两种方式来控制组件的行为. 1. 在XML布局文件中通过XML属性进行时控制 2. 在Java程序代码中通过调用方法进行时控制. 实际上不管使用哪种方式,他们控制android用户界面行为的本质是完全一样的.大部分时候,控制UI组件的XML属性还有对应的方法. 对于View类而言,他是所有UI组件的基类,因此他包含的XML属性和方法时所有组件可以使用的.XML文件布局相对简单,常用的几种属性练熟就基

JAVA中使用DOM解析XML文件

JAVA中使用DOM解析XML文件: 创建DocumentBuilderFactory的对象                                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 创建DocumentBuilder对象 通过documentBuilder对象的parser方法加载xml文件到当前项目下 获取所有XML文件内节点的集合    getElementsByTagName()方

java中采用dom4j解析xml文件

一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4j解析xml的具体操作. 二.代码详情    dom4j是一个第三方开发组开发出的插件,所以在我们使用dom4jf的时候我们要去下载一下dom4j对应版本的jar导入在我们项目中.  1)xml文件: <?xml version="1.0" encoding="UTF-8&

Android中解析与创建XML文件

Android中解析与创建XML文件 在Android中对XML的操作有多种方式,常见的有三种方式:SAX.DOM和PULL方式. DOM方式会把整个XML文件加载到内存中,在PC上常使用DOM的方式. 但是在性能敏感的设备上,主要采用的是SAX的方式,但是缺点是嵌套多个分支的时候处理不是很方便. 而PULL的方式类似SAX方式,同样很节省内存. 因此,本文章中只提供PULL的方式解析与创建XML文件. 基础类 本例中使用的实体类的定义如下: public class CAddress impl

浅试txt文件与xml文件互相转换

最近遇到了txt文件和xml文件互相转换的问题,于是自己写了写,不算深,只是简单的互相转换,下面把代码共享一下,欢迎大家指点. 先看结果: 这是数据表里面查询出来的  select * from 表名 将数据表导出到txt文件中: 将上述的txt文件转换成xml文件: 由于屏幕截图问题,一个屏没截完整,最后没问题的. 又将xml文件转换成txt文件 : 第一步:获得txt文件数据源,首先找一个数据表把里面的数据导出到txt文件中,以逗号隔开.如下: 配置文件和读取数据类就不多说了,默认的 . 从

Spring配置中的bean直接引用其它bean的属性值

pring配置中的bean直接引用其它bean的属性值来赋值给当前bean的属性,也可以直接调用其它bean的方法获取返回值来赋值给当前bean的属性,并且可以进行参数传递,这样可以省去在bean中注入需要获取属性值的bean. 以下是一个完整的示例: 1.需要JAVA类: Spring配置中的bean直接引用其它bean的属性值 package com.service.test; public class Bean1 { int v1 = 1; public int getV1() { ret

解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException

解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException这个问题出现的原因:一般在使用annotation的方式注入spring的bean 出现的,具体是由于spring采用代理的机制导致的,看使用的代码: Java代码 1. 使用类注入: @Resource(name = "aisleService") private AisleService aisleService; 2. 使用接口注入: @Resource(name = &quo