首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以两种模式运行一个Spring应用程序-作为CommandLineRunner和SpringBootServletInitializer类型

问以两种模式运行一个Spring应用程序-作为CommandLineRunner和SpringBootServletInitializer类型
EN

Stack Overflow用户
提问于 2020-02-05 18:50:49
回答 1查看 644关注 0票数 3

我需要以两种模式运行我的Spring应用程序:

作为命令行应用程序(没有Tomcat)的CommandLineRunner

  • As
  1. 作为独立的Tomcat.

的

  • SpringBootServletInitializer REST应用程序

问题:有可能吗?如何实现此设置?

EN

回答 1

Stack Overflow用户

发布于 2020-02-05 20:03:33

我认为问题中有一个矛盾:

如果您使用SpringBootServletInitializer,那么工件应该被打包为WAR,并部署在一些WAR服务器上,比如tomcat。在这种情况下,Tomcat是而不是。

如果您想要嵌入式Tomcat,那么您不需要WAR,您应该使用“通常”的jar类型的spring引导应用程序工件。

几个可能有用的事实:

CommandLineRunner bean没有什么特别之处,只是当应用程序上下文可用时,spring引导将在实现此接口的所有bean上自动运行run方法。

依赖项中有一个web启动程序这一事实通常意味着您打算运行web服务器(tomcat),但是并不总是这样,您可以指定web env。键入“NONE”,嵌入的tomcat将不会启动(有关更多技术信息,请参见this thread )

现在,考虑到这两个事实,并且假设您没有真正构建一个WAR (在本例中,您将不得不在嵌入式tomcat上托管它,java不会识别WAR)--例如,您可以定义一个“风味”--例如配置文件,并定义命令行运行程序的配置只对某些配置文件是活动的,而不是运行tomcat的属性--运行tomcat与另一种类型的配置文件相关。

更新

根据OP的评论:

因此,我们的目标是能够运行:

代码语言:javascript
复制
java -jar myapp.war

只有CommandLineRunner才能运行,没有真正的tomcat会被加载。

另一方面,您希望将myapp.war放到某些tomcat的webapp文件夹中,这样就不会调用CommandLineRunner了,对吗?

在这种情况下,考虑实施以下建议:

  1. 创建application-cmd.properties并指定tomcat不应该运行(web )。类型= NONE) -请参阅我在上面提供的

链接

  1. 在CommandLineRunner实现上添加@Profile("cmd"),以便在指定配置文件“cmd”时只运行。

  1. 使用--spring.profiles.active=cmd标志运行java -jar myapp.war,以便加载cmd配置文件。

  1. 不为tomcat部署更改任何东西-配置文件cmd不会被激活,CommandLineRunner不会运行
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60082329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档