之前的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配置
你可以通过键入./my-application.jar来运行你的应用程序(应用程序maven中artifactId的名称,前提是这个jar文件必须有x权限 chmod u+x project.jar),包含jar的目录将用作应用程序的工作目录。
SpringBoot应用程序可以很容易地作为Unix/Linux服务启动,使用init.d或systemd。
如果你已经配置了Spring Boot的Maven或Gradle插件来生成一个完全可执行的jar,并且你没有使用embeddedLaunchScript ,那么你的应用程序就可以作为一个init.d服务。简单地将jar符号链接到init.d支持标准start、restart和status。
支持以下的特性:
作为拥有jar文件的用户启动服务。只要用户有权限就可以启动 ,可以通过chown去配置
应用用PID位置/var/run/
控制台打印的日志为 /var/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/
官方建议不要用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是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 查看状态
微信公众号:
JAVA程序猿成长之路
分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务