我已经完成了Spring的Building a RESTful Web Service教程并创建了一个虚拟webapp(带有“Build with Maven”指令).我构建并打包WAR.然后我用这个命令运行它:
java -jar ./target/Dummy-1.0-SNAPSHOT.war
我可以在http://localhost:8080/greeting/看到虚拟JSON端点.
现在我想用Docker封装应用程序,这样我就可以进一步测试它而无需将Tomcat安装到系统空间.这是我创建的Dockerfile:
FROM tomcat:7-jre8-alpine
# copy the WAR bundle to tomcat
copY /target/Dummy-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/app.war
# command to run
CMD ["catalina.sh","run"]
我构建并运行docker绑定到http://localhost:8080.我可以在“http://localhost:8080”上看到Tomcat欢迎页面.但我也看不到我的应用程序:
> http://localhost:8080/app/
> http://localhost:8080/app/greeting/
> http://localhost:8080/greeting/
我该如何追查这个问题?可能是什么问题呢?
更新1:Tomcat管理界面截图
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
这是一个有效的SpringBoot应用程序,但不是Tomcat的可部署应用程序.要使其可部署,您可以:
> redefineApplication从Spring框架Web支持扩展SpringBootServletinitializer;然后
>覆盖configure方法:
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletinitializer;
@SpringBootApplication
public class Application extends SpringBootServletinitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
无需更改pom.xml文件(或任何其他配置).
重建dockerfile并使用正确的端口绑定运行它后,问候示例端点将通过以下方式提供:http://localhost:8080/app/greeting/
参考
> Spring Boot War deployed to Tomcat
> Spring Boot Reference Guide: Create a deployable war file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。