在Tomcat中部署的Spring Boot提供了404但是可以独立运行
我已经用嵌入式Tomcat测试Spring Boot大约一个月了,用于构建REST API。 一切都很好。 我们现在希望在单独的开发环境中部署API,该环境中有一些在Tomcat容器上运行的其他(非Spring)应用程序。
我使用Maven和Spring Boot Docs 将使用Spring Boot JAR应用程序转换为WAR中指定的更改。
部署顺利(日志很好,没有错误),看着Tomcat管理我看到我的应用程序已部署。 但是,当我尝试在curl中访问http:// localhost:8080 / sophia / users时 ,我得到404。
任何帮助深表感谢。
更新:
这是我的日志:
Netbeans的:
NetBeans:在Apache Tomcat 8.0.17配置文件模式下部署:false debug mode:false force redeploy:true
在/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT进行就地部署
部署正在进行中……
部署?配置=文件%3A%2Ftmp%2Fcontext1845402702541504208.xml&路径= /蒿
OK – 在上下文路径/ sophia部署应用程序
开始正在进行中……
启动?路径= /索菲娅
确定 – 在上下文路径/ sophia启动应用程序
Tomcat的:
INFO 10:47:52:703 org.springframework.boot.context.embedded.ServletRegistrationBean – 将servlet:’dispatcherServlet’映射到[/ sophia / *]
INFO 10:47:54:042 org.springframework.boot.SpringApplication – 在8.285秒内启动应用程序(JVM运行12087.301)
2015年1月22日10:47:54.060 INFO [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 localhost的sophia.xml中:
我试过访问
- HTTP://本地主机:8080 /索菲亚/用户
- http:// localhost:8080 / sophia-server-1.0.0-SNAPSHOT / users (WAR的名称)
第一个返回404,但返回来自我的CORSfilterbean的CORS信息。 第二个返回404没有CORS信息(表示应用程序已启动并已配置但我似乎无法访问控制器)。
运行应用程序时,调用路径包含几个部分。
第一个是部署应用程序的基本URL,在您的情况下是/sophia
。
第二个是你的案例中的DispatcherServlet
的servlet映射,它是/sohpia/*
。
第三个是DispatcherServlet
中的控制器映射,在您的示例中是/users
。
所有这些组合在一起创建了URL /sophia/sophia/users
。
作为WAR部署的区别在于您包含了一个单独的URL来部署,当作为jar运行时,默认情况下,它部署到/
(根)。
您可以通过将/sophia
作为application.properties
的server.context-path
并将DispatcherServlet
映射到/*
或/
来修复它。 这将在两种情况下为您提供您想要(和预期)的URL。
check java -version意味着如果你在java 8中编译了war并且tomcat在java 7上运行则它不起作用。
您是否尝试过扩展SpringBootServletInitializer并重写configure方法? 如上所述
与将应用程序作为容器内的war文件运行相比,jar文件的入口点不同[Main Class]。
希望这可以帮助。