我一直在用嵌入式Tomcat测试Spring Boot大约一个月来构建REST API。一切都很好。我们现在想要在一个单独的开发环境中部署API,该环境中还有一些在Tomcat容器上运行的其他(非Spring)应用程序。
我进行了Converting a Spring Boot JAR Application to a WAR using Maven和Spring Boot Docs中指定的更改。
部署顺利(日志很好,没有错误),看着Tomcat管理我看到我的应用程序已部署。但是,当我尝试在卷曲中访问http://localhost:8080/sophia/users时,我得到404。
非常感谢任何帮助。
更新:
以下是我的日志:
Netbeans的:
NetBeans:在Apache Tomcat 8.0.17上部署 个人资料模式:false 调试模式:false force redeploy:true
在/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT进行就地部署
部署正在进行中......
部署配置=文件%3A%2Ftmp%2Fcontext1845402702541504208.xml&安培;路径= /蒿
确定 - 在上下文路径/ 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 ms
在Catalina localhost的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"/>
我已尝试访问
第一个返回404但是使用来自我的CORS过滤器bean的CORS信息。第二个返回404没有CORS信息(表示应用程序已启动并已配置但我似乎无法访问控制器)。
答案 0 :(得分:18)
运行应用程序时,调用路径包含几个部分。
第一个是部署应用程序的基本URL,在您的情况下为/sophia
。
第二个是DispatcherServlet
的{{1}}的servlet映射。{/ 1}。
第三个是/sohpia/*
内的控制器映射,在您的示例中为DispatcherServlet
。
所有这些组合在一起创建了网址/users
。
作为WAR的部署之间的区别在于您包含了一个单独的URL来部署,当作为jar运行时,默认情况下,它部署到/sophia/sophia/users
(根)。
您可以将/
作为/sophia
添加server.context-path
并将application.properties
映射到DispatcherServlet
或/*
来解决问题。这将在两种情况下为您提供您想要的URL(和预期的)。
答案 1 :(得分:6)
check java -version意味着如果你在java 8中编译了war并且tomcat在java 7上运行那么它就不起作用了。
答案 2 :(得分:0)
您是否尝试过扩展SpringBootServletInitializer并覆盖configure方法?如上所述here
与将应用程序作为容器内的war文件运行相比,jar文件的入口点与[Main Class]不同。
希望这有帮助。
答案 3 :(得分:0)