【问题标题】:Does spring boot uses external server, or embedded server when deployed on external server as war?当部署在外部服务器上作为战争时,spring boot 是使用外部服务器还是嵌入式服务器?
【发布时间】:2020-08-20 13:12:32
【问题描述】:

我知道如果我们想在外部服务器上部署 Spring Boot Web 应用程序,我们应该排除嵌入式 服务器,但如果我们不这样做会发生什么?假设我在 jboss 外部服务器上部署 spring boot war,但我没有排除 tomcat 服务器?在这种情况下,spring boot 是使用 jboss 外部服务器,还是仍然使用嵌入式 tomcat 一个?

【问题讨论】:

  • @AniketSahrawat 感谢您的快速回复。你能详细说明一下吗?为什么不使用嵌入式服务器?
  • 为什么不启动嵌入式服务器? spring boot 知道如果它有嵌入式服务器,它应该启动它并使用它?是不是在 Spring Boot 源代码中说,如果嵌入式服务器部署在外部服务器上,则不要使用嵌入式服务器?

标签: java spring tomcat jboss


【解决方案1】:

在双重打包场景中,理想情况下,您应该指定tomcat 依赖项,以便您在WEB-INF/lib-provided 下而不是WEB-INF/lib 下拥有tomcat 依赖项。因此,外部服务器 lib-provided 文件夹将被忽略,但独立 spring boot 应用程序 tomcat 依赖项将作为嵌入从 lib-provided 文件夹加载。

请注意,如果您不排除或提供 tomcat 依赖项,外部服务器可能会失败或工作在不一致状态,甚至可以在某些版本中正常工作而在另一个版本中失败,具体取决于服务器对重复库的处理。

【讨论】:

    【解决方案2】:

    如果您不排除 tomcat-dependencies 也不将依赖项声明为 provided,则在 wildfly 19.0.0 上部署 war 失败。与java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer `

    【讨论】:

    • 我用的是jboss 10,它没有失败,所以这意味着spring使用外部jboss服务器没有嵌入对吗?
    • 你能分享你的依赖吗?
    • 我通过 spring 初始化程序创建了应用程序,我没有为 tomcat 指定“提供”
    • 如果部署成功并且您在 jboss 上看到了该应用程序,那么该应用程序将通过您的 jboss 提供服务:-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2020-02-24
    • 2014-01-21
    • 2018-07-28
    • 2012-03-16
    相关资源
    最近更新 更多