spring加载jar包中的多个配置文件

标签: spring 加载 jar | 发表时间:2014-10-15 16:17 | 作者:iwelcomeyou
出处:http://www.iteye.com

在使用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包中的配置文件不加载问题

jar中配置文件放在“/”(根目录)下时,通过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中配置如下:

  1. <context-param>  
  2.   <param-name>contextConfigLocation</param-name>  
  3.   <param-value>  
  4.     classpath*:applicationContext.xml,  
  5.     classpath*:applicationContext-service.xml,  
  6.   </param-value>  
  7. </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

说明:无通配符,必须完全匹配

 

classpath:App?-Beans.xml

说明:匹配一个字符,例如 App1-Beans.xml 、 App2-Beans.xml

 

classpath:user/*/Base-Beans.xml

说明:匹配零个或多个字符串(只针对名称,不匹配目录分隔符等),例如:user/a/Base-Beans.xml 、 user/b/Base-Beans.xml ,但是不匹配 user/Base-Beans.xml

 

classpath:user/**/Base-Beans.xml

说明:匹配路径中的零个或多个目录,例如:user/a/ab/abc/Base-Beans.xml,同时也能匹配 user/Base-Beans.xml

 

classpath:**/*-Beans.xml

说明:表示在所有的类路径中查找和加载文件名以“-Beans.xml”结尾的配置文件,但重复的文件名只加载其中一个,视加载顺序决定

 

classpath*:user/**/*-Beans.xml

classpath*:**/*-Beans.xml

说明:“classpath*:”表示加载多个资源文件,即使重名也会被加载,比如app1.jar中有一个config-Beans.xml,app2.jar中也有一个config-Beans.xml,这个时候,两个都会加载。

 

 

转: http://josh-persistence.iteye.com/blog/1940297

 

Spring XML文件中导入位于jar包中的XML文件         

在基于Spring构建的项目中,我们都知道核心的Context配置文件是ApplicationContext.xml或者{projectName}-serverlet.xml, 如果我们想拆分配置文件,那么只需在核心的配置文件中import其它的几个配置文件即可。

 

举例说明:如果当前的项目名称为cms-validator,我们假定现在Spring的核心的Context配置文件是:

cms-validator-servlet.xml.我们可以在这个配置文件中导入其它的配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="  
  5.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  6.        ">  
  7.       
  8.     <import resource="cms-validator-common.xml"/>  
  9.     <import resource="cms-validator-hibernate.xml"/>  
  10.     <import resource="cms-validator-service.xml"/>  
  11.     <import resource="cms-validator-dao.xml"/>  
  12.   
  13.        
  14. </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中,则可以用

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="  
  5.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  6.        ">  
  7.       
  8.   
  9.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-common.xml"/>  
  10.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-hibernate.xml"/>  
  11.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-service.xml"/>  
  12.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-dao.xml"/>  
  13.        
  14. </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文件。

 

转:http://hxraid.iteye.com/blog/483115

【解惑】深入jar包:从jar包中读取资源文件

 

如果我想在spring的配置文件中引用jar中的hibernate映射xml文件,怎么办? 

<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>

 

 

转:http://josh-persistence.iteye.com/blog/1940297

 

Spring XML文件中导入位于jar包中的XML文件

在基于Spring构建的项目中,我们都知道核心的Context配置文件是ApplicationContext.xml或者{projectName}-serverlet.xml, 如果我们想拆分配置文件,那么只需在核心的配置文件中import其它的几个配置文件即可。

 

举例说明:如果当前的项目名称为cms-validator,我们假定现在Spring的核心的Context配置文件是:

cms-validator-servlet.xml.我们可以在这个配置文件中导入其它的配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="  
  5.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  6.        ">  
  7.       
  8.     <import resource="cms-validator-common.xml"/>  
  9.     <import resource="cms-validator-hibernate.xml"/>  
  10.     <import resource="cms-validator-service.xml"/>  
  11.     <import resource="cms-validator-dao.xml"/>  
  12.   
  13.        
  14. </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中,则可以用

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="  
  5.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  6.        ">  
  7.       
  8.   
  9.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-common.xml"/>  
  10.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-hibernate.xml"/>  
  11.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-service.xml"/>  
  12.     <import resource="lib/validator-rest-1.0.jar*/cms-validator-dao.xml"/>  
  13.        
  14. </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

 

spring加载hibernate映射文件的几种方式

 

在Spring的applicationContext.xml中配置映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少时,可以用sessionFactory的所属类LocalSessionFactoryBean的“mappingResources”属性,方式包括(mappingResources,mappingLocations、mappingDirectoryLocations与mappingJarLocations )定义方法如下:

 第一种:

<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中



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [spring 加载 jar] 推荐:

spring加载jar包中的多个配置文件

- - 行业应用 - ITeye博客
在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示:. 这样太复杂了,对于一个大的项目而言,要在这里写入太多的配置,影响美观还害怕引入的xml减少. 可以自定义一个applicationContext_all.xml,使用import引入其他配置文件,如下所示:.

Spring Boot 如何热加载 jar 实现动态插件?

- - IT瘾-dev
动态插件化编程是一件很酷的事情,能实现业务功能的 「解耦」便于维护,另外也可以提升 「可扩展性」随时可以在不停服务器的情况下扩展功能,也具有非常好的 「开放性」除了自己的研发人员可以开发功能之外,也能接纳第三方开发商按照规范开发的插件. 常见的动态插件的实现方式有 SPI、 OSGI等方案,由于脱离了 Spring IOC 的管理在插件中无法注入主程序的 Bean 对象,例如主程序中已经集成了 Redis 但是在插件中无法使用.

Spring Boot 如何热加载jar实现动态插件?

- - 陶陶技术博客
动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也具有非常好的 开放性 除了自己的研发人员可以开发功能之外,也能接纳第三方开发商按照规范开发的插件. 常见的动态插件的实现方式有 SPI、 OSGI 等方案,由于脱离了 Spring IOC 的管理在插件中无法注入主程序的 Bean 对象,例如主程序中已经集成了 Redis 但是在插件中无法使用.

Spring boot executable jar/war 原理

- - ImportNew
spring boot里其实不仅可以直接以 Java -jar demo.jar的方式启动,还可以把jar/war变为一个可以执行的脚本来启动,比如./demo.jar. 把这个executable jar/war 链接到/etc/init.d下面,还可以变为Linux下的一个service. 只要在spring boot maven plugin里配置:.

JAVA 动态(手动)加载jar文件

- - CSDN博客编程语言推荐文章
//filePath 是jar的绝对路径. //里面是一个url的数组,可以同时加载多个. //根据类名加载指定类,例:. //通过反射调用类中的方法,例如调用addFile方法,有1个String参数和一个int参数:. 如果有返回值,则直接返回需要的值,例:. 作者:kingboy123000 发表于2013-10-23 16:12:30 原文链接.

spring 加载顺序

- - 企业架构 - ITeye博客
web.xml文件加载顺序.      1 、启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 两个结点.      2 、紧急着,容创建一个 ServletContext ( servlet 上下文),这个 web 项目的所有部分都将共享这个上下文.

Spring两种加载创建spring bean配置文件的方式

- - ITeye博客
基于spring做bean的管理,基于web开发时有两种加载配置文件创建bean的方式. 第一种基于DispatcherServlet的init-param:. 第二种基于ContextLoaderListener:. PS:如果两种方式都采用了那么spring容器中会维护两套bean,如果有调度,定时任务等那么会重复执行.

太陽の光をビンにためよう。 Sun Jar/Moon Jar

- GOT4416 - まとめのインテリア
Sun Jar/Moon Jarは、照明です. 陽のあたる窓際に置いておきます. 夕日のようなオレンジ色で発光するSun Jar. 月の光を連想させる涼しげなブルーの光のMoon Jar. こちらのショップで、詳しく紹介されています. 楽天市場ショップ「プラスチック」の商品ページへ. 大手サイトで、この商品を検索しました.

国信证券 RocketMQ + Spring Boot 在配置热加载的实践

- - IT瘾-dev
在进行微服务架构研发的过程中,不少研发人员都提出配置热加载的需求,一方面是为了提升研发效率,开发人员修改配置不需要重启服务;另一方面是为了线上紧急事件,可以快速恢复,例如线上数据库 down 了,可以紧急启动降级开关,通过配置热加载动态生效,降低处理事件的时间. 于是我采用 rocketmq 消息队列,实现一套解耦的配置热加载机制.

从Maven仓库中导出jar包

- - 企业架构 - ITeye博客
从Maven仓库中导出jar包:进入工程pom.xml 所在的目录下,. 输入以下命令:mvn dependency:copy-dependencies -DoutputDirectory=lib. 更简单的  mvn dependency:copy-dependencies    会导出到target\dependency 下面.