龙空技术网

Spring Boot应用程序安装成服务

农非农 461

前言:

目前同学们对“安装程序已停止工作怎么解决”大致比较注重,看官们都需要学习一些“安装程序已停止工作怎么解决”的相关知识。那么小编在网络上搜集了一些有关“安装程序已停止工作怎么解决””的相关文章,希望咱们能喜欢,小伙伴们快快来学习一下吧!

1. 概述

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

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

2. 项目设置和构建说明2.1. 打包

Web 应用程序传统上打包为 Web 应用程序 (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>

packaging必须设置为jar。请注意,我们已将 spring-boot-maven-plugin 插件的 <executable> 参数设置为 true。这可确保MANIFEST.MF文件将添加到 JAR 包中。此manifest包含一个 Main-Class 条目,该条目指定哪个类定义应用程序的 main 方法。

2.3. 构建您的应用程序

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

$ mvn clean package

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

$ java -jar your-app.jar

此时,您仍然需要使用 -jar 选项调用 Java 解释器。有很多原因说明为什么最好通过能够将其作为服务调用来启动应用。

3. 在 Linux 上

为了将程序作为后台进程运行,我们可以简单地使用 nohup Unix 命令,但由于各种原因,这也不是首选方式。

相反,我们将守护我们的进程。在 Linux 下,我们可以选择使用传统的 System V 初始化脚本或 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初始化

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 applicationAfter=syslog.target[Service]User=baeldungExecStart=/path/to/your-app.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target
3.3. Upstart

Upstart 是一个基于事件的服务管理器,是 System V init 的潜在替代品,它提供了对不同守护进程行为的更多控制。

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

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

# Place in /home/{user}/.config/upstartdescription "Some Spring Boot application"respawn # attempt service restart if stops abruptlyexec java -jar /path/to/your-app.jar

现在运行“start your-app”,您的服务将启动。

4. 在Windows上

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

4.1. Windows服务包装器

由于Java服务包装器的GPL许可证(参见下一节)与Jenkins的MIT许可证相结合的困难,Windows Service Wrapper项目(也称为winsw)被构思出来。

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

首先,下载winsw二进制文件。接下来,定义我们的 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 服务包装器

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

5. 其他方式

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

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

标签: #安装程序已停止工作怎么解决