25.生产上发布安装Spring-Boot应用

之前的jar运行可通过 java -jar project.jar/java -jar project.jar -debug      

除了使用java -jar运行Spring引导应用程序之外,还可以为Unix系统提供有效的可执行应用程序。一个完全可执行的jar可以像任何其他可执行二进制文件一样执行,也可以通过注册init.d或systemd。这使得安装非常容易在通用的生产环境中管理Spring引导应用程序。

警告:

       完全可执行的jar正常运行是在文件的前面嵌入额外的脚本。目前,有些工具不接受这种格式,因此可能不总是使用这种技术。例如,jar -xf可能静默地不能提取一个已被完全执行的jar或war。如果您打算直接执行它,而不是使用java -jar或将其部署到servlet容器,那么建议您只将jar或war完全执行。

创建一个完全可以运行的jar Maven配置

<plugin>
        <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
       <executable>true</executable>
   </configuration>

</plugin>

你可以通过键入./my-application.jar来运行你的应用程序(应用程序maven中artifactId的名称,前提是这个jar文件必须有x权限 chmod u+x   project.jar),包含jar的目录将用作应用程序的工作目录。

SpringBoot应用程序可以很容易地作为Unix/Linux服务启动,使用init.d或systemd。

  • 安装作为init.d服务

     如果你已经配置了Spring Boot的Maven或Gradle插件来生成一个完全可执行的jar,并且你没有使用embeddedLaunchScript ,那么你的应用程序就可以作为一个init.d服务。简单地将jar符号链接到init.d支持标准start、restart和status。

支持以下的特性:

作为拥有jar文件的用户启动服务。只要用户有权限就可以启动 ,可以通过chown去配置

应用用PID位置/var/run/<appname>/<appname>.pid

控制台打印的日志为 /var/log/<appname>.log

假设你的Spring Boot应用在/var/myapp,如果将Spring Boot程序作为init.d服务,创建的软连接为:

$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/   赋予root权限创建软连接

创建软连接成功后启动项目

$ service myapp start

显示:Running [5029]

以上步骤笔者在一台虚拟机上操作,报Unable to find java(对于这个问题还没有找到解决的方式,可能是JDK安装的有问题),在公司的物理服务器上运行操作是正常的。

如果应用启动失败,可以检查启动时的日志/var/log/<appname>.log

官方建议不要用root用户来启动在init.d中配置的spring boot服务,所以你应该建一个用户专门来启动你的spring boot服务。

chown bootapp:bootapp your-app.jar

$ sudo ln -s /var/myapp/your-app.jar /etc/init.d/

为了复制启动修改你的jar文件,应该配置如下权限:

$ chmod 500 your-app.jar   //只有自己有读和执行的权限

  • 安装作为systemd

      Systemd是System V init系统的继承者,现在正在被许多现代的Linux发行版所使用。尽管你可以继续使用init.d,也可以使用systemd ' service '脚本启动Spring引导应用程序。

      假设您在/var/myapp中安装了Spring Boot应用程序,将Spring Boot应用程序安装为systemd服务,创建在/etc/systemd/system目录下创建一个名为myapp的脚本(应该有x权限),具体示例如下:

[Unit]
Description=myapp
After=syslog.target
[Service]
User=myapp #服务执行用户
ExecStart=/var/myapp/myapp.jar #安装路径
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

注意:记住要更Description, User 和ExecStart字段,改成你的应用。

注意,ExecStart字段没有声明脚本操作命令,这意味着默认情况下使用run命令。

接着:

(1) $ systemctl enable myapp.service

(2) $ systemctl start myapp.service 

(1),(2)命令必须执行

systemctl status myapp.service 查看状态

 微信公众号

 

 

原文地址:https://www.cnblogs.com/niugang0920/p/12196379.html