我正在使用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));
答案 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);
备注的
org.apache.ibatis.io.Resources
的代码。你找到它here。