我想在我的Tomcat应用程序中创建多个应用程序上下文。
其中一些应用程序上下文具有相同的包名和类名,但它们都引用不同的jar。
例如:
application0使用service.jar,model.jar
application1使用service-a.jar,model-a.jar
application2使用service-b.jar,model-b.jar
application0上下文正常,因为在orign项目中。
我将一些网页引用到自定义application1,我使用自定义类加载器来启动applicationContext。
File file0 = new File("D://git/project1/service-a.jar");
File file1 = new File("D://git/project1/modele-a.jar");
// convert the file to URL format
URL url0 = file0.toURI().toURL();
URL url1 = file1.toURI().toURL();
List<URL> urls = new LinkedList<>();
List<File> libs = listFilesForFolder(new File("D://protal//apache-tomcat-8.0.39//lib"));
for(File lib : libs) {
urls.add(lib.toURI().toURL());
}
urls.add(url1);
urls.add(url0);
final URLClassLoader customClassLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]));
ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("applicationContext.xml") {
protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader)
{
super.initBeanDefinitionReader(reader);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
reader.setBeanClassLoader(customClassLoader);
}
};
allApplicationContexts.add(context1);
Spring上下文启动正常,但是它们无法创建组件扫描 bean, PropertyPlaceholderConfigurer 无效。其他一切似乎都是正确的。
我确定我的配置是正确的,因为它没有自定义类加载器。 Libs包含所有spring lib。
是否可以使用多个Spring上下文?