繁体   English   中英

部署在 Tomcat 中的 Spring Boot 给出 404,但可以独立运行

[英]Spring Boot Deployed in Tomcat gives 404 but works Stand-alone

我已经使用嵌入式 Tomcat 测试 Spring Boot 大约一个月来构建 REST API。 一切正常。 我们现在想要在单独的开发环境中部署 API,该环境有几个其他(非 Spring)应用程序在 Tomcat 容器上运行。

我进行了使用 MavenSpring Boot Docs将 Spring Boot JAR 应用程序转换为 WAR 中指定的更改。

部署进展顺利(日志正常,没有错误)并且查看 Tomcat 管理我看到我的应用程序已部署。 但是,当我尝试在 curl 中访问http://localhost:8080/sophia/users 时,我得到 404。

任何帮助深表感谢。

更新:

这是我的日志:

网豆:

NetBeans:在 Apache Tomcat 8.0.17 上部署配置文件模式:false 调试模式:false 强制重新部署:true

在 /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT 就地部署

部署正在进行中...

deploy?config=file%3A%2Ftmp%2Fcontext1845402702541504208.xml&path=/sophia

OK - 在上下文路径 /sophia 部署应用程序

开始进行中...

开始?路径=/索菲亚

OK - 在上下文路径 /sophia 启动应用程序

雄猫:

信息 10:47:52:703 org.springframework.boot.context.embedded.ServletRegistrationBean - 映射 servlet:'dispatcherServlet' 到 [/sophia/*]

信息 10:47:54:042 org.springframework.boot.SpringApplication - 在 8.285 秒内启动应用程序(JVM 运行 12087.301)

2015 年 1 月 22 日 10:47:54.060 信息 [http-nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescriptor 部署配置描述符 /home/bugz/workspace/server/apache-tomcat- 8.0.17/conf/Catalina/localhost/sophia.xml 已在 12,091 毫秒内完成

在 Catalina 本地主机的 sophia.xml 中:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" docBase="/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT" path="/sophia"/>

我试过访问

  1. http://localhost:8080/sophia/users
  2. http://localhost:8080/sophia-server-1.0.0-SNAPSHOT/users (WAR 名称)

第一个返回 404 但带有来自我的 CORS 过滤器 bean 的 CORS 信息。 第二个返回 404 没有 CORS 信息(这表明应用程序已启动并已配置,但我似乎无法访问控制器)。

运行应用程序时,调用路径由几个部分组成。

第一个是部署应用程序的基本 URL,在您的情况下是/sophia

第二个是DispatcherServlet的 servlet 映射,在您的情况下是/sohpia/*

第三个是DispatcherServlet内部控制器的映射,在您的示例中是/users

所有这些东西结合起来创建 URL /sophia/sophia/users

部署为 WAR 之间的区别在于您包含了一个单独的 URL 来部署,当作为 jar 运行时,默认情况下,它部署到/ (根)。

您可以通过将/sophia作为application.propertiesserver.context-path并将DispatcherServlet映射到/*/来修复它。 这将在两种情况下为您提供所需(和预期)的 URL。

检查 java -version 意味着如果您在 java 8 中编译了 war 并且 tomcat 在 java 7 上运行,则它不起作用。

您是否尝试过扩展 SpringBootServletInitializer 并覆盖 configure 方法? 如前所述这里

jar 文件的入口点与在容器内作为 war 文件运行应用程序相比是不同的 [Main Class]。

希望这可以帮助。

检查java版本

pom.xml 中存在的版本必须与服务器上安装的版本相同

openjdk 11 对我来说很好用

https://adoptopenjdk.net/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM