转自: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的路径