2016-09-21 41 views
11

我完全可以在两种情况下配置弹簧引导,这里的问题是它们哪一个更健壮,并且是更推荐的,因为我没有寻找春天启动文档中推荐的方式在生产环境中部署它,我对使用嵌入式容器关注的是:用于生产的外部容器中的弹簧引导嵌入式容器或战争文件

  1. 如果我想将其设置为Windows或Linux的服务,是JAR文件的最好的选择?
  2. 如果我使用jar文件,我不会有权重新启动服务器。
  3. 也许将来我需要更多的应用程序在同一个容器中。
  4. 如果我重新启动机器,我必须再次执行java -jar。

在一般的问题是,这是更好使用的jar文件并执行其如Java生产-jar jarname.jar或包装更改为战争设置Tomcat作为提供并设置所生成的战争在一个空的Tomcat 。

我希望你能帮助我。

---编辑---

很多时候,答案是靠,这是一个正常的Web应用程序或REST Web服务。

+0

我有同样的问题,我认为这是最好有它运行的一个tomcat服务器。但取决于您使用项目的操作类型。另外我认为tomcat提供了一些安全性来运行它。 –

+0

你的意思是什么样的安全?“我也认为tomcat提供了一些安全性来运行它。”? – Andy

+0

我认为他在说的是jdbc领域,例如 –

回答

0
  1. 我不知道很多有关Windows服务,但在Linux上,你可以一个罐子的执行添加到RC-脚本(进而使在一定的运行级别的应用程序启动)。对于一个春季启动应用程序,你只需要符号链接到罐子,你可以像任何其他服务启动/停止/等,请参阅:Spring Boot application as a Service

  2. 重新启动机器或JVM?关闭机制内置于弹簧引导中,您只需激活它(并且应该启用安全机制,以便任何人都无法做到这一点),请参阅:How to shutdown a Spring Boot Application in a correct way?

  3. Spring-Boot启用微服务 - 所以想法是每个webapp/microservice都有一个嵌入式webapp容器。这可以减少只有一个服务出现故障时丢失所有服务的风险。

  4. 是的。每次重新启动后必须执行catalina.sh|bat start。或者你添加一个合适的启动脚本(见1)

我觉得你宁愿用老式的方式来做。尽管有'品味问题'的答案,但有一个参数pro-jar:唯一的依赖是JVM!其余的(web-app-container,db-drivers和其他库)都是你提供的包的一部分。如果您决定更换下一个版本的容器,那么它将会如此。

+0

不,不,我真的很喜欢用胖子弹簧启动我的独特关注点是如何部署它在生产上还是在你的评论中如何创建将jar设置为服务的脚本,因为没有很多关于如何在jar中部署的文档,这是因为在生产中我使用外部容器。 –

+0

我不知道,但它比我想象的要简单得多:http://stackoverflow.com/questions/21503883/spring-boot-application-as-a-service – Andy

8

罐子包装是完全适合生产,你应该宁可退回到战争只有当你真的要 - 这往往是当你无法控制你的部署环境这往往是大企业的情况的情况下( )。

Spring Boot Reference中有一章讲述如何将基于Spring Boot的应用程序设置为Unix/Linux/Windows服务:Installing Spring Boot applications

关于你的关注:

也许在未来,我需要在同一容器中更多的应用。

具有嵌入式容器,如果您需要在同一台机器上运行更多的应用程序,你应该分别启动两个应用程序,不同的端口上的每个运行,有效地你最终将有两个容器中运行 - 这是很好的,应用是更好相互隔离。

+0

jar部署的问题是,如果你有N个应用程序,您将拥有N个嵌入式服务器。如果从隔离的角度来看它是好的,它会将应用程序服务器消耗的内存乘以N.如果N很大,这可能是一个问题。不是吗? –

2

大约一个月前,我有像你这样的问题。 让我分享我的结论:

1)JAR:

  • 可以独立运行不同的端口,每个机应用(在Linux中,Java的罐子...> app_logs.log &)和你可以路由它(例如nginx)。请注意,重新启动不是问题。您可以编写自定义bash脚本(如下所示:ps aux | grep appname并通过PID杀死)
  • 但配置生产应用程序时出现了一些问题。属性文件将归档到jar中。

2)WAR

  • 您可以部署到容器中,只要运行它。轻松管理服务器。如果要重新配置应用程序,请从容器内的未归档文件夹打开属性文件,将其更改为需要并重新启动容器。因此,管理和配置将很容易。
  • 但是,如果您希望在另一个端口上运行此服务器中的另一个应用程序,那么您必须安装另一个容器副本并对其进行配置。

因此,在我的实践中,使用war应用比jar更容易管理和重新配置。

+2

我不同意战争与罐子的结论。将嵌入式Tomcat作为可执行jar文件运行Spring Boot是一种更简单的做法。使用配置文件并在启动时指定配置文件可轻松解决多个运行实例以及不同端口需求的问题,如:--spring.profiles.active = prodconfig1等。或者更好,只需传入所需的Tomcat端口作为虚拟机参数:-Dserver.port = 9090它产生的输出:(TomcatEmbeddedServletContainer) - Tomcat启动端口:9090(http) – pczeus

+1

经过这么多时间,我同意你的想法。 –