我完全能够在两种情况下配置spring boot,这里的问题是哪些更强大并且更推荐,因为我没有在spring boot文档中找到部署它的推荐方法在生产环境中,我对使用嵌入式容器的担忧是:
一般来说,问题是哪个更好地使用jar文件并在生产中将其作为java -jar jarname.jar执行,或者将包装更改为war将tomcat设置为提供,并将生成的war设置为空的tomcat。
我希望你能帮助我。
--- --- EDIT
很多时候答案取决于,这适用于普通的Web应用程序或其他Web服务。
答案 0 :(得分:11)
jar 打包非常适合制作,只有在您真的需要时才应该回退到 war - 这通常是您无法控制部署环境的情况(大型企业经常出现这种情况)。
Spring Boot Reference中有一章关于将基于Spring Boot的应用程序设置为Unix / Linux / Windows服务:Installing Spring Boot applications。
关于你的担忧:
将来我可能需要在同一容器中使用更多应用程序。
对于嵌入式容器,如果你需要在同一台机器上运行更多应用程序,你应该分别启动两个应用程序,每个应用程序在不同的端口上运行,实际上你最终会运行两个容器 - 这很好,应用程序可以更好地隔离每个其他
答案 1 :(得分:2)
大约一个月前,我遇到了像你这样的问题。 让我分享我的结论:
1)JAR:
2)战争
因此,在我的实践中,使用war app比jar更容易管理和重新配置。
答案 2 :(得分:0)
我不太了解Windows服务,但在Linux上,您可以将jar的执行添加到RC-Scripts(从而使应用程序在某个运行级别启动)。对于弹簧启动应用程序,您只需要符号链接到jar,您可以像任何其他服务一样启动/停止/等,请参阅:Spring Boot application as a Service
重启机器还是JVM? Spring引导中内置了一个关闭机制,您只需要激活它(并且您应该启用安全机制,这样任何人都无法做到这一点),请参阅:How to shutdown a Spring Boot Application in a correct way?
Spring-Boot支持微服务 - 因此我们的想法是为每个webapp / microservice配备一个嵌入式webapp容器。这可以降低在只有一个服务失败时丢失所有服务的风险。
是。每次重启后你必须执行catalina.sh|bat start
。或者您添加适当的启动脚本(请参阅1.)
我觉得你宁愿以老式的方式去做。尽管有“品味”的问题。回答,pro-jar有一个参数:唯一的依赖是JVM!其余的(web-app-container,db-drivers,其他库)都是你提供的软件包的一部分。如果您决定更换下一个版本的容器,那么它也是。
答案 3 :(得分:0)
使用" war"的另一个原因生产中的文件。 Springboot掩盖了Jetty抛出的错误,而部署在Jetty中的WAR正确捕获了它(虽然下面的问题仍在审核中)
https://github.com/spring-projects/spring-boot/issues/8917#issuecomment-294673487
答案 4 :(得分:0)
我对服务器的知识了解不多,但是我的建议是
如果您使用的是 Monolithic 应用程序,最好将war与 外部tomcat。
如果用于 Micro Service 应用程序,请使用嵌入式 雄猫与不同的端口。而且每个微服务应用程序都是 彼此独立。