spring加载jar包中多个xml配置⽂件mappingLocations
在使⽤spring加载jar包中的配置⽂件时,不⽀持通配符,需要⼀个⼀个引⼊,如下所⽰:
Java代码
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:beanconfigs/l,
classpath*:beanconfigs/l,
...
</param-value>
冯绍峰个人资料身高</context-param>
这样太复杂了,对于⼀个⼤的项⽬⽽⾔,要在这⾥写⼊太多的配置,影响美观还害怕引⼊的xml减少。可以⾃定义⼀个l,使⽤import引⼊其他配置⽂件,如下所⽰:
Java代码
<import resource="beanconfigs/l"/>
<import resource="beanconfigs/l"/>
...
可以使⽤通配符设置,如下所⽰:
Java代码
<import resource="beanconfigs/applicationContext_*.xml"/>
这样在spring配置就可以写成如下所⽰:
Java代码
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:l
</param-value>
</context-param>
请问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="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>
我刚才试了⼀下, 如果把配置⽂件改成
Xml代码
<bean id="sessionFactory"
class="hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingLocations">
<list>
<value>classpath*:/config/hibernate/framework/*.xml</value>
</list>
</property>
...
</bean>
果然可以了
Spring中如何加载多个配置⽂件
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的路径
jar中配置⽂件放在“/”(根⽬录)下时,通过classpath*加载配置⽂件,jar包中的配置⽂件不会加载,
这是因为Spring使⽤classpath加载配置⽂件时需要借助JDK的Resources( name)⽅法,⽽该⽅法有⼀个局限:当传⼊的参数为空字符串时,即我们本意是想从根⽬录获取⽂件,这时JDK只会返回存在于⽂件系统中的资源,⽽在jar包中的资源并不会被返回。
解决⽅法是将配置⽂件放在根的下⼀级⽬录内,例如/l,l中配置为classpath*:conf/**/*l。
⽐如你的abc.jar包中顶层⽬录包含⼀个l⽂件,并且abc.jar包放在WEB-INF/lib⽬录下
在l中配置如下:
1. <context-param>
2.  <param-name>contextConfigLocation</param-name>
3.  <param-value>
4.    classpath*:l,
5.    classpath*:l,
6.  </param-value>
7. </context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:l,
classpath*:l,
</param-value>
</context-param>
这样配置,是可以⾃动加载的!
l
说明:⽆通配符,必须完全匹配
classpath:App?-l
说明:匹配⼀个字符,例如 l 、 l
classpath:user/*/l
说明:匹配零个或多个字符串(只针对名称,不匹配⽬录分隔符等),例如:user/l 、 user/l ,但是不匹配 l classpath:user/**/l
说明:匹配路径中的零个或多个⽬录,例如:user/a/ab/l,同时也能匹配 l
classpath:**/*-l
说明:表⽰在所有的类路径中查和加载⽂件名以“-l”结尾的配置⽂件,但重复的⽂件名只加载其中⼀个,视加载顺序决定
classpath*:user/**/*-l
classpath*:**/*-l
说明:“classpath*:”表⽰加载多个资源⽂件,即使重名也会被加载,⽐如app1.jar中有⼀个l,app2.jar中也有⼀个l,这个时候,两个都会加载。
转:金融危机是什么意思
陈翰宾
在基于Spring构建的项⽬中,我们都知道核⼼的Context配置⽂件是l或者{projectName}-l, 如果我们想拆分配置⽂件,那么只需在核⼼的配置⽂件中import其它的⼏个配置⽂件即可。
举例说明:如果当前的项⽬名称为cms-validator,我们假定现在Spring的核⼼的Context配置⽂件是:
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="/schema/beans"
3.        xmlns:xsi="/2001/XMLSchema-instance"
4.        xsi:schemaLocation="
5.        /schema/beans /schema/beans/spring-beans-3.1.xsd夏凉被
6.        ">
7.
8.    <import resource="l"/>
9.    <import resource="l"/>
10.    <import resource="l"/>
11.    <import resource="l"/>
12.
13.
14. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="
/schema/beans /schema/beans/spring-beans-3.1.xsd
">
<import resource="l"/>
<import resource="l"/>
<import resource="l"/>
<import resource="l"/>
</beans>
很显然,上⾯的⽅案是这些配置⽂件和当前的配置⽂件都在⼀个project的同⼀个⽬录中,那么如果我们想导⼊的配置⽂件在jar包,怎么处理?假设这⼏个配置⽂件在validator-rest-1.0.jar中,则可以⽤
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="/schema/beans"
3.        xmlns:xsi="/2001/XMLSchema-instance"
4.        xsi:schemaLocation="
5.        /schema/beans /schema/beans/spring-beans-3.1.xsd
6.        ">
7.
8.
9.    <import resource="lib/validator-rest-1.0.jar*/l"/>
10.    <import resource="lib/validator-rest-1.0.jar*/l"/>
11.    <import resource="lib/validator-rest-1.0.jar*/l"/>
12.    <import resource="lib/validator-rest-1.0.jar*/l"/>
13.
14. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="
/schema/beans /schema/beans/spring-beans-3.1.xsd
">
<import resource="lib/validator-rest-1.0.jar*/l"/>
<import resource="lib/validator-rest-1.0.jar*/l"/>
<import resource="lib/validator-rest-1.0.jar*/l"/>
<import resource="lib/validator-rest-1.0.jar*/l"/>
</beans>
只要⽤*号,就可以完成从jar包中import⽂件。
转:hxraid.iteye/blog/483115
如果我想在spring的配置⽂件中引⽤jar中的hibernate映射xml⽂件,怎么办?
<property name="mappingResources">
<list>
<value>com/dao/maps/l</value>
</list>
</property>
l这个⽂件是放在⼀个框架的jar中的。
如果我不在⾃⼰的项⽬内相同⽬录创建l这个⽂件,则系统启动加载该⽂件时抛出⽂件不存在的异常。
<property name="mappingJarLocations">
<list>
<value>WEB-INF/lib/test.jar</value>
</list>
</property>
转:josh-persistence.iteye/blog/1940297
在基于Spring构建的项⽬中,我们都知道核⼼的Context配置⽂件是l或者{projectName}-l, 如果我们想拆分配置⽂件,那么只需在核⼼的配置⽂件中import其它的⼏个配置⽂件即可。
举例说明:如果当前的项⽬名称为cms-validator,我们假定现在Spring的核⼼的Context配置⽂件是: