META-INF/context.xml导致我的Java Webapp出现问题

META-INF/context.xml导致我的Java Webapp出现问题,java,maven,tomcat,jndi,Java,Maven,Tomcat,Jndi,我正在将一个简单的Java 7(我使用Maven进行项目设置、依赖项等)web应用程序部署到Tomcat 8,我需要一个META-INF/context.xml来指定我的数据库资源: project/src/main/resources/META-INF/context.xml <xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/TestDB" auth="Container"

我正在将一个简单的Java 7(我使用Maven进行项目设置、依赖项等)web应用程序部署到Tomcat 8,我需要一个META-INF/context.xml来指定我的数据库资源:

project/src/main/resources/META-INF/context.xml

<xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
            maxTotal="100" maxIdle="30" maxWaitMillis="10000"
            username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://127.0.0.1:3306/javatest"/>
</Context>

当我从项目中删除这个META-INF/context.xml文件时,我可以访问我的JSP,但是,当然,它们会返回错误,因为我的数据源丢失了。然而,当我将META-INF/context.xml包含回项目时,我尝试访问的所有资源都会给我一个404。为什么会这样


我完成了该项目中所有必要的步骤

服务器启动时是否有任何异常

如果jdbc驱动程序没有捆绑在WEB-INF/lib中,也没有捆绑在CATALINA_BASE/lib中,那么它就找不到该类。这极有可能导致启动失败

检查catalina.out(如果您在unix上)或catalina_BASE/logs/localhost/catalina.date.log

编辑

刚刚注意到您有src/main/resources/META-INF


请尝试src/main/webapp/META-INF/context.xml

服务器启动时是否有任何异常

如果jdbc驱动程序没有捆绑在WEB-INF/lib中,也没有捆绑在CATALINA_BASE/lib中,那么它就找不到该类。这极有可能导致启动失败

检查catalina.out(如果您在unix上)或catalina_BASE/logs/localhost/catalina.date.log

编辑

刚刚注意到您有src/main/resources/META-INF


请尝试src/main/webapp/META-INF/context.xml

不要删除META-INF/context.xml,因为它是项目的默认配置!也不要在默认的
META-INF/context.xml
中输入生产密码

请改用
copyXML=“true”
!在第一次部署到tomcat时,
META-INF/context.xml
被永久复制到
tomcat/conf/Catalina

Set to true if you want a context XML descriptor embedded inside the application 
(located at /META-INF/context.xml) to be copied to xmlBase when the application is 
deployed. On subsequent starts, the copied context XML descriptor will be used in 
preference to any context XML descriptor embedded inside the application even if the 
descriptor embedded inside the application is more recent. The flag's value defaults to 
false. Note if deployXML is false, this attribute will have no effect.
第一次部署后,将tomcat/conf/Catalina/webappname.xml更新为生产数据库信息


任何重新部署都将继续使用
tomcat/conf/Catalina/webappname.xml

不要删除
META-INF/context.xml
,因为它是项目的默认配置!也不要在默认的
META-INF/context.xml
中输入生产密码

请改用
copyXML=“true”
!在第一次部署到tomcat时,
META-INF/context.xml
被永久复制到
tomcat/conf/Catalina

Set to true if you want a context XML descriptor embedded inside the application 
(located at /META-INF/context.xml) to be copied to xmlBase when the application is 
deployed. On subsequent starts, the copied context XML descriptor will be used in 
preference to any context XML descriptor embedded inside the application even if the 
descriptor embedded inside the application is more recent. The flag's value defaults to 
false. Note if deployXML is false, this attribute will have no effect.
第一次部署后,将tomcat/conf/Catalina/webappname.xml更新为生产数据库信息


任何重新部署都将继续使用
tomcat/conf/Catalina/webappname.xml

不,没有任何例外。我认为在我的应用程序中使用context.xml文件会弄乱它的路径。我还确保用于Java的连接器/J 3.0.11-stable位于$CATALINA_BASE/lib中。这似乎很奇怪。我一直使用app.war/META-INF/context.xml文件,没有任何问题。你是用一个本地分解的应用程序来实现这一点的吗?我基本上是通过“mvn干净安装”来生成war文件。我从目标目录抓取它并直接安装到$CATALINA_BASE/webapps。应该就是这样。。。Strange@MiguelPortugal我昨晚发布了一个编辑我的答案。如果你有机会,请尝试一下。我想这可能是Tomcat中的一个bug。可能,只是可能,当容器在比预期更深的位置遇到context.xml时,它会感到困惑,并干扰应用程序的部署。不,没有任何例外。我认为在我的应用程序中使用context.xml文件会弄乱它的路径。我还确保用于Java的连接器/J 3.0.11-stable位于$CATALINA_BASE/lib中。这似乎很奇怪。我一直使用app.war/META-INF/context.xml文件,没有任何问题。你是用一个本地分解的应用程序来实现这一点的吗?我基本上是通过“mvn干净安装”来生成war文件。我从目标目录抓取它并直接安装到$CATALINA_BASE/webapps。应该就是这样。。。Strange@MiguelPortugal我昨晚发布了一个编辑我的答案。如果你有机会,请尝试一下。我想这可能是Tomcat中的一个bug。可能,只是可能,当容器在比预期更深的位置遇到context.xml时,它会感到困惑,并妨碍应用程序的部署。