spring加载jar包中多个配置文件(转)
转自:http://evan0625.iteye.com/blog/1598366
在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示:
Java代码
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:beanconfigs/applicationContext_1.xml,
classpath*:beanconfigs/applicationContext_2.xml,
...
</param-value>
</context-param>
这样太复杂了,对于一个大的项目而言,要在这里写入太多的配置,影响美观还害怕引入的xml减少。可以自定义一个applicationContext_all.xml,使用import引入其他配置文件,如下所示:
Java代码
<import resource="beanconfigs/applicationContext_1.xml" />
<import resource="beanconfigs/applicationContext_2.xml" />
...
可以使用通配符设置,如下所示:
Java代码
<import resource="beanconfigs/applicationContext_*.xml" />
这样在spring配置就可以写成如下所示:
Java代码
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext_all.xml
</param-value>
</context-param>
另,见网上资料:http://www.iteye.com/problems/9008
请问Spring如何在jar文件里面按文件夹加载配置文件?
一个Web应用有多个模块(假设有org和auth两个模块), 我希望为每个模块创建一个项目, 在项目中维护模块用到的配置文件. 然后将这些模块分别打包成jar放到web应用的WEB-INF/lib下.
现在用单元测试, 在Web应用中运行单元测试, 如果在Web应用的Build Path/Project中添加模块项目, 单元测试能够成功, 如果使用Build Path/Libraries添加模块jar文件, 运行单元测试失败. Spring中加载配置文件代码如下:
Xml代码
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath*:/config/hibernate/app/</value>
<value>classpath*:/config/hibernate/framework/</value>
</list>
</property>
...
</bean>
每个jar包里面都有/config/hibernate/framework文件夹
网上找到一个相关的讨论: http://forum.springframework.org/archive/index.php/t-10029.html
好像是说对于directory的加载必须是文件夹必须存在于文件系统中, jar下面的文件夹找不到.不知道这个问题有没有办法解决?
我刚才试了一下, 如果把配置文件改成
Xml代码
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingLocations">
<list>
<value>classpath*:/config/hibernate/framework/*.xml</value>
</list>
</property>
...
</bean>
果然可以了
Spring中如何加载多个配置文件
http://tech.it168.com/jd/2008-04-01/200804011615198.shtml
1.第一种,使用数组
代码
ApplicationContext contex=new ClassXmlApplicationContext(bew String["a1.xml","a2.xml"]);
2.第二种,只用通配符
代码
ApplicationContext contex=new ClassXmlApplicationContext("a*.xml");
//但此种方法只对文件系统中的xml文件有效,针对jar包中的无效
3.第三种,引入
代码
ApplicationContext contex=new ClassXmlApplicationContext("a1.xml"); //在a1.xml中 //执行resource路径为相对a1.xml的路径
转:http://webwork.iteye.com/blog/519844
Spring中使用classpath*加载配置文件,jar包中的配置文件不加载问题
这是因为Spring使用classpath加载配置文件时需要借助JDK的ClassLoader.getResources(String name)方法,而该方法有一个局限:当传入的参数为空字符串时,即我们本意是想从根目录获取文件,这时JDK只会返回存在于文件系统中的资源,而在jar包中的资源并不会被返回。
解决方法是将配置文件放在根的下一级目录内,例如/conf/application-context.xml,web.xml中配置为classpath*:conf/**/*application-context.xml。
比如你的abc.jar包中顶层目录包含一个applicationContext-service.xml文件,并且abc.jar包放在WEB-INF/lib目录下
在web.xml中配置如下:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath*:applicationContext.xml,
- classpath*:applicationContext-service.xml,
- </param-value>
- </context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext.xml,
classpath*:applicationContext-service.xml,
</param-value>
</context-param>
这样配置,是可以自动加载的!
转:http://www.cnblogs.com/taven/archive/2012/10/24/2737556.html
Spring的 classpath 通配符加载配置文件
classpath:app-Beans.xml
在基于Spring构建的项目中,我们都知道核心的Context配置文件是ApplicationContext.xml或者{projectName}-serverlet.xml, 如果我们想拆分配置文件,那么只需在核心的配置文件中import其它的几个配置文件即可。
举例说明:如果当前的项目名称为cms-validator,我们假定现在Spring的核心的Context配置文件是:
cms-validator-servlet.xml.我们可以在这个配置文件中导入其它的配置文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- ">
- <import resource="cms-validator-common.xml"/>
- <import resource="cms-validator-hibernate.xml"/>
- <import resource="cms-validator-service.xml"/>
- <import resource="cms-validator-dao.xml"/>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
"> <import resource="cms-validator-common.xml"/>
<import resource="cms-validator-hibernate.xml"/>
<import resource="cms-validator-service.xml"/>
<import resource="cms-validator-dao.xml"/> </beans>
很显然,上面的方案是这些配置文件和当前的配置文件都在一个project的同一个目录中,那么如果我们想导入的配置文件在jar包,怎么处理?假设这几个配置文件在validator-rest-1.0.jar中,则可以用
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- ">
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-common.xml"/>
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-hibernate.xml"/>
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-service.xml"/>
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-dao.xml"/>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
"> <import resource="lib/validator-rest-1.0.jar*/cms-validator-common.xml"/>
<import resource="lib/validator-rest-1.0.jar*/cms-validator-hibernate.xml"/>
<import resource="lib/validator-rest-1.0.jar*/cms-validator-service.xml"/>
<import resource="lib/validator-rest-1.0.jar*/cms-validator-dao.xml"/> </beans>
只要用*号,就可以完成从jar包中import文件。
<property name="mappingResources">
<list>
<value>com/dao/maps/Order.hbm.xml</value>
</list>
</property>
Order.hbm.xml这个文件是放在一个框架的jar中的。
如果我不在自己的项目内相同目录创建Order.hbm.xml这个文件,则系统启动加载该文件时抛出文件不存在的异常。
<property name="mappingJarLocations">
<list>
<value>WEB-INF/lib/test.jar</value>
</list>
</property>
在基于Spring构建的项目中,我们都知道核心的Context配置文件是ApplicationContext.xml或者{projectName}-serverlet.xml, 如果我们想拆分配置文件,那么只需在核心的配置文件中import其它的几个配置文件即可。
举例说明:如果当前的项目名称为cms-validator,我们假定现在Spring的核心的Context配置文件是:
cms-validator-servlet.xml.我们可以在这个配置文件中导入其它的配置文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- ">
- <import resource="cms-validator-common.xml"/>
- <import resource="cms-validator-hibernate.xml"/>
- <import resource="cms-validator-service.xml"/>
- <import resource="cms-validator-dao.xml"/>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
"> <import resource="cms-validator-common.xml"/>
<import resource="cms-validator-hibernate.xml"/>
<import resource="cms-validator-service.xml"/>
<import resource="cms-validator-dao.xml"/> </beans>
很显然,上面的方案是这些配置文件和当前的配置文件都在一个project的同一个目录中,那么如果我们想导入的配置文件在jar包,怎么处理?假设这几个配置文件在validator-rest-1.0.jar中,则可以用
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- ">
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-common.xml"/>
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-hibernate.xml"/>
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-service.xml"/>
- <import resource="lib/validator-rest-1.0.jar*/cms-validator-dao.xml"/>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
"> <import resource="lib/validator-rest-1.0.jar*/cms-validator-common.xml"/>
<import resource="lib/validator-rest-1.0.jar*/cms-validator-hibernate.xml"/>
<import resource="lib/validator-rest-1.0.jar*/cms-validator-service.xml"/>
<import resource="lib/validator-rest-1.0.jar*/cms-validator-dao.xml"/> </beans>
只要用*号,就可以完成从jar包中import文件。
我测试:
<!-- 如果资源文件在jar包中: -->
<import resource="classpath*:com/garfield/config/applicationContext-*.xml" />
转:
http://blog.csdn.net/feihong247/article/details/7831064
第一种:
<property name="mappingResources">
<list>
<value>com/w3cs/vlar/hibernate/Person.hbm.xml</value>
<value>com/w3cs/vlar/hibernate/Car.hbm.xml</value>
<value>com/w3cs/vlar/hibernate/Engine.hbm.xml</value>
<value>com/w3cs/vlar/hibernate/Toy.hbm.xml</value>
</list>
</property>
当配置文件变得越来越多,阅读和修改起来也越来越麻烦,而且基于XML的配置也可能带来输入的错误,导致你可能因为一个字符的错误而浪费半天时间去寻找错误。
第二种:
在这种情况下,可以使用LocalSessionFactoryBean的“mappingDirectoryLocations”属性来定义映射文件,只要指出映射文件所在文件夹就可以了,Spring会替你找出该文件夹内所有的映射文件,定义方法如下:
<property name="mappingDirectoryLocations">
<list>
<value>WEB-INF/mappings</value>
</list>
</property>
第三种:
当然,它的属性值也可以通过classpath来指出,这时所指定的是工程的类路径
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/my/package/*.hbm.xml</value>
</list>
</property>
第四种:
<!-- 增加了对大对象字段处理配置Begin -->
<bean id ="oracleLobHandler"
class ="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init ="true" >
<property name ="nativeJdbcExtractor" ref ="nativeJdbcExtractor" />
</bean>
<bean id ="nativeJdbcExtractor" class ="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init ="true"/>
<!-- 增加了对大对象字段处理配置End -->
<!-- 定义Hibernatte框架中需要的SesscionFactory对象//-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--增加了对大对象字段处理配置Begin -->
<property name ="lobHandler" ref ="oracleLobHandler"/>
<!--增加了对大对象字段处理配置End -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/my/package/login/dao/pojo/</value>
<value>classpath:/my/package/jpf/dao/pojo/</value>
......
</list>
</property>
spring整合hibernate配置文件中的sessionfactory中,配置映射文件有好多种方法:
LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件:mappingResources、mappingLocations、mappingDirectoryLocations与mappingJarLocations。
他们的区别:
mappingResources:指定classpath下具体映射文件名
<property name="mappingResources">
<value>petclinic.hbm.xml</value>
</property>
mappingLocations:可以指定任何文件路径,并且可以指定前缀:classpath、file等
<property name="mappingLocations">
<value>/WEB-INF/petclinic.hbm.xml</value>
</property>
<property name="mappingLocations">
<value>classpath:/com/company/domain/petclinic.hbm.xml</value>
</property>
也可以用通配符指定,'*'指定一个文件(路径)名,'**'指定多个文件(路径)名,例如:
<property name="mappingLocations">
<value>classpath:/com/company/domain/**/maps/*.hbm.xml</value>
</property>
上面的配置是在com/company/domain包下任何maps路径下的hbm.xml文件都被加载为映射文件mappingDirectoryLocations:指定映射的文件路径
mappingJarLocations:指定加载的映射文件在jar文件中
当有mappingLocations存在时,mappingResources中对hibernate映射文件的配置是不加载的,因此,需要把映射文件配置都放到mappingLocations中
----------------------------------美丽的分割线--------------------------------------------------------
好吧,我承认,上面这些我只是收集,还未全部验证。
spring加载jar包中多个配置文件(转)的更多相关文章
- spring加载jar包中多个配置文件
转自:http://www.cnblogs.com/GarfieldTom/p/3723915.html <import resource="classpath*:applicatio ...
- spring加载jar包中多个配置文件(转载)
本文转载自:http://www.cnblogs.com/GarfieldTom/p/3723915.html
- spring 加载jar包中的配置文件
package com.xxx.ssptsppt.dataexchange.utils; import com.xxx.maybee.engine.utils.FileUtil; import com ...
- 动态加载jar包中的类(方式一)
嘛, 直接上代码 public static class TestClassLoader extends ClassLoader { @Override protected Class<?> ...
- idea中pom如何加载jar包依赖
1.需求分析 在特定需求的情况下,idea需要加载jar包,那么如何在idea中正确的配置jar依赖呢?今天博主就这个问题给大伙讲解下,希望对大伙有所帮助 2.实现方案①在工程src目录下新建l ...
- JAVA动态加载JAR包的实现
如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...
- java动态加载jar包,并运行其中的类和方法
动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...
- tomcat/Java指定加载jar包的路径
背景:部署的web站点,应用默认加载工程的/webapps/工程名/WEB-INF/lib下的jar包 但是我需要提供一个和web工程没关系的的jar包管理目录 解决方法: 执行java方法时 ...
- 动态加载jar包(二)
上次说的加载jar包,有几个问题没有解决: 1.如果项目包含了其他的jar包如何解决? 2.如何规范上传的jar包的类和方法? 下面就解决一下上面两个问题 一.首先编写被调用的类,这次使用maven工 ...
随机推荐
- Create an Android library
官方文档 创建 Android 库 [Create an Android library] Android 库在结构上与 Android app module 相同.它可以提供构建应用所需的一切内容, ...
- android bundle 对象 序列化
Android使用Intent.putSerializable()进行数据传递,或者使用Bundle进行数据传递,实质上都是进行的Serializable数据的操作,说白了都是传递的原数据的一份拷贝, ...
- Android -- ViewPager切换动画,PageTransformer
transformPage(View view, float position) view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时 ...
- Linux Kernel系列三:Kernel编译和链接中的linker script语法详解
先要讲讲这个问题是怎么来的.(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么). 我在编译内核的时候,发现arch/arm/kernel目录下有 ...
- sql server2008R2 无法连接到WMI提供程序。你没有权限或者该服务器无法访问
在自己的Win8.1的系统在安装了Vs2013和Sqlserver2008R2 今天在打开ssms的时候发现连接不上数据库,且出现了以下问题 然后打开Sqlserver配置管理器准备看看sqlserv ...
- 解决THINKCMF后台文章的相册图集只能上传一个图片的问题
遇到的问题: 最近使用了THINKCMF给客户开发了一个企业网站,客户在使用了一段时间后打电话说后台文章编辑页面有问题 经过沟通过知道,在后台文章编辑和添加页面相册图集每次只能上传一张图片 在跟客 ...
- Linux中挂载新的磁盘到指定目录或分区
新增磁盘的设备文件名为 /dev/vdb 大小为100GB. #fdisk -l 查看新增的的磁盘 1.对新增磁盘进行分区 #fdisk /dev/vdb 按提示操作 p打印 n新增 d 删除 w ...
- (转)[Unity3D]BuildPipeline.PushAssetDependencies 打包依赖包,优化UI Prefab的资源引用加载(坑爹之处)
转自:http://blog.csdn.net/chiuan/article/details/39040421#reply 1:长话短说,UI Prefab中一般会交叉引用Atlas,那么打包时候我们 ...
- Pandas对行情数据的预处理
库里是过去抓取的行情数据,间隔6秒,每分钟8-10个数据不等,还有开盘前后的一些数据,用Pandas可以更加优雅地进行处理. 需要把当前时间设置为index df=df.set_index('time ...
- [Spring Boot] Introduce to Mockito
We have the implemetion: @SpringBootApplication public class MockitoDemoApplication { public static ...