场景 我的项目中需要对 Web 服务进行多线程调用。这是使用 ThreadPoolTaskExecutor (Spring) 实现的。由于线程类需要在运行时提供值,因此实现了如下代码 -
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");
for (DocumentData documentData : documentDataList){
MinerThread minerThread = applicationContext.getBean("minerThread",MinerThread.class);
minerThread.setHeader(header);
minerThread.setDocumentData(documentData);
minerThread.setBatchSize(batchSize);
minerThreadExecutor.execute(minerThread);
}
问题 在本地我有tomcat服务器,这个实现按预期工作。但是在 Weblogic 上(在客户端计算机上,我无权访问 Weblogic),当部署战争时,它会引发 FileNotFound 异常。
由于应用程序上下文对象是通过 ClassPathXmlApplicationContext API 创建的,因此认为错误是因为该位置不在 Weblogic 类路径下而引发的。Weblogic 服务器类路径中没有设置任何内容。然而,即使在类路径中包含 WEB-INF/classes 之后,也会引发相同的异常。
异常 2013/01/29 09:19:12,853 [错误] RequestQueueListener - org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无法从相对位置导入 bean 定义 [../shared-common-context.xml ] 违规资源:类路径资源[application-context.xml];嵌套异常是 org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [../shared-common-context.xml];嵌套异常是 java.io.FileNotFoundException:类路径资源 [../shared-common-context.xml] 无法打开,因为它不存在
BeanDefinitionParsingException 是由于在 Weblogic 类路径中添加的相对路径引起的。
在 Weblogic 上,文件位于 - ./wls10.3.4/ColorisPPT1/user_projects/domains/Coloris_PPT1_Domain/servers/Coloris_PPT1_AdminServer/tmp/.appmergegen_1336142780924_documentservice.war/WEB-INF/classes
当建立战争(使用Maven)时,application-context.xml 被放置在 WEB-INF/classes 文件夹下。
有人可以建议如何进行此操作。