{fbmip:fixed type="top" id="mipfixed" dataSlide="header-fixed-slide" class="fb-header-fixed"}
{fbview:mainmenu menuItemCode='$menuItemCode'/}
{/fbmip:fixed}
{fbmip:img fit='cover' src="$banner2['img_url']" alt="$banner2['title']"/}

Spring Boot应用程序即服务

  • 发布时间:
  • 浏览:226
  • 来源:平步科技官网

1.概述

本文探讨了将Spring Boot应用程序作为服务运行的一些选项。

首先,我们将解释Web应用程序的打包选项和系统服务。 在后续章节中,我们将探讨在为Linux作为基于Windows的系统设置服务时的不同替代方案。

最后,我们将结束对其他信息来源的一些参考。

2.项目设置和构建说明

2.1。 打包

传统上,Web应用程序打包为Web应用程序aRchives(WAR)并部署到Web服务器。

Spring Boot应用程序可以打包为WAR和JAR文件。 后者在JAR文件中嵌入Web服务器,允许您运行应用程序而无需安装和配置应用程序服务器。

2.2。 Maven配置

我们首先定义pom.xml 文件 的配置

<packaging>jar</packaging>
 
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
</parent>
 
<dependencies>
    ....
</dependencies>
 
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

包装必须设置为jar 我们在撰写本文时使用的是最新的稳定版Spring Boot,但1.3之后的任何版本都足够了。 您可以 在此处 找到有关可用版本的更多信息

请注意,我们已经设定<可执行文件>的 参数,以真正 春天启动的maven-plugin的 神器。 这可确保将 MANIFEST.MF 文件添加到JAR包中。 此清单包含 Main-Class 条目,该条目指定哪个类定义应用程序的主要方法。

2.3。 构建应用程序

在应用程序的根目录中运行以下命令:


$ mvn clean package

可执行JAR文件现在在目标 目录中 可用, 我们可以通过在命令行上执行以下命令来启动应用程序:

$ java -jar your-app.jar

此时,您仍需要使用-jar 选项 调用Java解释器 有很多原因可以让您通过将其作为服务调用来启动应用程序。

3.在Linux上

为了将程序作为后台进程运行,我们可以简单地使用nohup  Unix命令,但由于各种原因,这不是首选方法。 这个 帖子 提供了一个很好的解释

相反,我们将守护 我们的过程。 在Linux下,我们可以选择使用传统的 System V init 脚本或Systemd 配置文件 来配置守护程序 前者传统上是最知名的选择,但逐渐被后者取代。

您可能会发现这种差异更多的细节在这里

为了增强安全性,我们首先创建一个特定用户来运行服务,并相应地更改可执行JAR文件权限:

$ sudo useradd baeldung

$ sudo passwd baeldung

$ sudo chown baeldung:baeldung your-app.jar

$ sudo chmod 500 your-app.jar


3.1。 System V Init

Spring Boot可执行JAR文件使服务设置过程非常简单:

$ sudo ln -s /path/to/your-app.jar /etc/init.d/your-app

上面的命令创建了一个指向可执行JAR文件的符号链接。 您必须使用可执行JAR文件的完整路径,否则符号链接将无法正常工作。 此链接使您可以将应用程序作为服务启动:

sudo service your-app start

该脚本支持标准服务启动 停止 重启 状态 命令。 此外:

  • 它启动 我们刚刚创建 的用户 baeldung 下运行的服务
  • 它在 /var/run/your-app/your-app.pid中 跟踪应用程序的进程ID
  • 它将控制台日志写入/var/log/your-app.log ,您可能需要检查以防应用程序无法正常启动

3.2。 Systemd

systemd 服务的设置非常简单为好。 首先,我们 使用以下示例 创建一个名为 your-app.service 的脚本 ,并将其放在 / etc / systemd / system 目录中:

[Unit]

Description=A Spring Boot application

After=syslog.target

 

[Service]

User=baeldung

ExecStart=/path/to/your-app.jar SuccessExitStatus=143

 

[Install]

WantedBy=multi-user.target


请记住修改Description User ExecStart 字段以匹配您的应用程序。 此时您也应该能够执行上述标准服务命令。

与上一节中描述 System V init 方法 相反, 应使用服务脚本中的相应字段显式配置进程ID文件和控制台日志文件。 可以在 此处 找到详尽的选项列表

3.3。 暴发户

Upstart 是一个基于事件的服务管理器,可以替代System V init ,它可以更好地控制不同守护进程的行为。

该站点具有良好的设置说明 ,几乎适用于任何Linux发行版。 使用Ubuntu时,您可能已经安装并配置了它(检查 / etc / init中 是否有任何名称以“upstart”开头的作业 )。

我们创建了一个作业your-app.conf 来启动我们的Spring Boot应用程序:

# Place in /home/{user}/.config/upstart

 

description "Some Spring Boot application"

 

respawn # attempt service restart if stops abruptly

 

exec java -jar /path/to/your-app.jar


现在运行“启动你的应用程序”,你的服务就会开始。

Upstart提供了许多工作配置选项,您可以在这里 找到大部分工作配置选项

4.在Windows上

在本节中,我们提供了几个可用于将Java JAR作为Windows服务运行的选项。

4.1。 Windows服务包装器

由于Java Service Wrapper 的GPL许可证 (参见下一小节)与Jenkins的MIT许可证相结合 ,因此构思 Windows Service Wrapper 项目,也称为winsw

Winsw 提供了编程方式来安装/卸载/启动/停止服务。 此外,它可以用于在Windows下运行任何类型的可执行文件作为服务,而Java Service Wrapper,如其名称所暗示的,仅支持Java应用程序。

首先,在这里 下载二进制文件 接下来,定义我们的Windows服务 MyApp.xml 的配置文件 应如下所示:

<service>

    <id>MyApp</id>

    <name>MyApp</name>

    <description>This runs Spring Boot as a Service.</description>

    <env name="MYAPP_HOME" value="%BASE%"/>

    <executable>java</executable>

    <arguments>-Xmx256m -jar "%BASE%\MyApp.jar"</arguments>

    <logmode>rotate</logmode>

</service>


最后,你必须重新命名winsw.exe MyApp.exe的 ,以便其名称与匹配MyApp.xml 配置文件。 此后您可以像这样安装服务:

$ MyApp.exe install

同样,您可以使用卸载 启动 停止 等。

4.2。 Java Service Wrapper

如果您不介意Java Service Wrapper 项目 的GPL许可 ,此替代方案可能会满足您将JAR文件配置为Windows服务的需求。 基本上,Java Service Wrapper还要求您在配置文件中指定,该文件指定如何在Windows下将您的进程作为服务运行。

本文 以非常详细的方式解释了如何在Windows下将JAR文件的这种执行设置为服务,因此我们无需重复这些信息。

5.其他参考文献

Spring Boot应用程序也可以使用Procrun  of Apache Commons Daemon 项目 作为Windows服务启动 Procrun是一组允许Windows用户将Java应用程序包装为Windows服务的应用程序。 这样的服务可以设置为在机器启动时自动启动,并且将在没有任何用户登录的情况下继续运行。

有关在Unix下启动Spring Boot应用程序的更多详细信息,请参见此处 还有关于如何修改 基于 Redhat 的系统的 Systemd单元文件的 详细说明 最后

最后,这个快速的方法 描述了如何将Bash脚本合并到您的JAR文件中,以便它本身成为可执行文件!

六,结论

服务允许您非常有效地管理应用程序状态,正如我们所见,Spring Boot应用程序的服务设置现在比以往更容易。

只需记住按照用户权限的重要且简单的安全措施来运行您的服务。