MyBatis在Tomcat目录中查找xml文件

时间:2014-09-05 11:12:17

标签: eclipse tomcat mybatis

我正在使用Eclipse + Tomcat测试Web应用程序,Eclipse部署Web应用程序文件并启动Tomcat,应用程序运行正常。但是当MyBatis尝试打开它的XML配置文件时,它会在

中查找它们
C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\persistence\db\oracle.xml

而不是正确的地方:

C:\workspace\mywebapp\src\persistence\db\oracle.xml

MyBatis应该在哪里寻找XML文件?

修改

这是我指定相对路径的地方:

String cfgFile = "persistence/db/oracle.xml";
Reader reader  = Resources.getResourceAsReader(cfgFile);
session.put(db, new SqlSessionFactoryBuilder().build(reader));

2 个答案:

答案 0 :(得分:1)

Resources.getResourceAsReader查看类路径中的文件。对于在tomcat类路径中运行的Web应用程序,由WEB-INF/classes和来自WEB-INF/lib的所有jar以及$TOMCAT_HOME\lib之类的tomcat文件夹组成。

您最常遇到的问题可能是oracle.xml文件未添加到部署中。看起来c:\workspace\myweapp\src不在eclipse项目的源文件夹中,因此eclipse不会将文件从它复制到部署到tomcat的文件夹中。根据您现有的项目结构,您可能需要在src中创建子文件夹,并在其中添加persistence所有子文件夹。如果src的某个子文件夹已经是eclipse中的源文件夹,这将允许您避免冲突。我建议使用maven project structure

src
   main
      * java  
          you java source code here organized by package
      * resources
          persistence

我用*标记了应作为源文件夹添加到eclipse的文件夹。

请注意,说C:\workspace\mywebapp\src\persistence\db\oracle.xml是搜索它的正确位置是不正确的。在创建战争以将其部署到生产环境之后,此路径很可能无法在您的生产服务器上使用。你真正需要的是在适当的地方(persistence\db\oracle.xml下)包括WEB-INF/classes战争。

答案 1 :(得分:0)

也许您需要另一个类加载器 1 。试试这个:

String cfgFile = "persistence/db/oracle.xml";
ClassLoader classloader = Thread.currentThread().getContextClassLoader()
Reader reader  = Resources.getResourceAsReader(classloader, cfgFile);

备注

  1. 请参阅Difference between thread's context class loader and normal classloader,您可能希望查看org.apache.ibatis.io.Resources的代码。你找到它here