每日一博 - Spring Boot Application as a Service

简介: 每日一博 - Spring Boot Application as a Service

d0fdb2e70e1847b2b9749789048967d3.png

老路子


在Linux服务器上启动Spring Boot项目,都是通过nohup java -jar xxx 命令让程序作为后台进程执行的, 这… 也不错,但更好的方法是将Spring Boot作为Service启动



f9068b4eade0479ea7cb24afa417c4aa.png

操作步骤

打包插件增加executable true

<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</packaging>
  <configuration>
      <executable>true</executable>
  </configuration>

标示该jar为可执行,否则启动Spring Boot服务会报错.


gradle构建的SpringBoot项目,则相应地需要增加如下配置

bootJar {
     launchScript()
}


构建应用

$ mvn clean package


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

$ java -jar your-app.jar


此时,我们仍然需要使用-jar选项调用 Java 解释器。


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

$ $ sudo useradd artisan
$ sudo passwd artisan
$ sudo chown artisan:artisan your-app.jar
$ sudo chmod 500 your-app.jar


一定要给jar包赋可执行权限


System V Init

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


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


$ sudo service your-app start


a5ca1227bc644a85806d85d531ce2209.png


该脚本支持标准的服务启动、停止、重启和状态命令。而且:


它启动在我们刚刚创建的用户artisan下运行的服务

它在/var/run/your-app/your-app.pid 中跟踪应用程序的进程 ID

它将控制台日志写入/var/log/your-app.log,可能需要检查一下,以防应用程序无法正常启动

92b015e656e9452bbf2ac44937b202d9.png


开机启动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字段以匹配应用程序。此时应该能够执行上述标准服务命令。


自定义JVM参数


只需在jar包所在的同级目录下添加与jar包同名的配置文件,比如添加一个叫coder-xiaoming.conf的配置文件(名字要和jar的名字相同哦),然后在文件里面自定义JVM参数JAVA_OPTS:

export JAVA_OPTS="-Xmx256m -Xms256m"

69c8dc05966241f79e66151c6ac45469.png


相关文章
|
8月前
|
前端开发 Java 开发者
深入理解Spring Boot中的@Service注解
【4月更文挑战第22天】在 Spring Boot 应用开发中,@Service 注解扮演着特定的角色,主要用于标识服务层组件。本篇技术博客将全面探讨 @Service 注解的概念,并提供实际的应用示例,帮助开发者理解如何有效地使用这一注解来优化应用的服务层架构
1692 1
|
8月前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
195 0
|
3月前
|
Java Spring 容器
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
这篇文章讨论了在Spring Boot 3.2.1版本中,同名同类型的bean和@Service注解类之间冲突的问题得到了解决,之前版本中同名bean会相互覆盖,但不会在启动时报错,而在配置文件中设置`spring.main.allow-bean-definition-overriding=true`可以解决这个问题。
120 0
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
|
5月前
|
Java Windows
SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
157 2
|
5月前
|
Java Spring
【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式
【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式
|
5月前
|
Java Spring
【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动
【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动
|
5月前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
|
5月前
|
前端开发 JavaScript Java
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
|
5月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
7月前
|
缓存 Java Maven
Spring Boot 启动错误:To display the conditions report re-run your application with ‘debug‘ enable —【已解决】
Spring Boot 启动错误:To display the conditions report re-run your application with ‘debug‘ enable —【已解决】
1345 1