每日一博 - 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


相关文章
|
21天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
21 0
|
5月前
|
Java Spring
Spring Boot使用策略模式指定Service实现类
Spring Boot使用策略模式指定Service实现类
|
5月前
|
消息中间件 Java Kafka
SpringBoot中使用异步方法优化Service逻辑,提高接口响应速度
异步方法适用于逻辑与逻辑之间可以相互分割互不影响的业务中, 如生成验证码和发送验证码组成的业务, 其实无需等到真正发送成功验证码才对客户端进行响应, 可以让短信发送这一耗时操作转为异步执行, 解耦耗时操作和核心业务;
|
2月前
|
Java 数据库 开发者
Spring注解大揭秘:@Component、@Service、@Repository详解
Spring注解大揭秘:@Component、@Service、@Repository详解
35 0
|
3月前
|
前端开发 Java Spring
使用Spring Boot集成Shiro时出现了无法注入Service的问题
使用Spring Boot集成Shiro时出现了无法注入Service的问题
|
4月前
|
XML Java 应用服务中间件
WebService - Axis2与Spring整合并发布多个service(同样使用services.xml)
WebService - Axis2与Spring整合并发布多个service(同样使用services.xml)
84 0
|
4月前
|
Java 应用服务中间件 Spring
WebService - CXF 与Spring整合(Service+Client)
WebService - CXF 与Spring整合(Service+Client)
24 0
|
4月前
|
Java Linux Windows
windows解决SpringBoot启动时:APPLICATION FAILED TO START
windows解决SpringBoot启动时:APPLICATION FAILED TO START
37 0
|
4月前
|
存储 XML Java
Spring中service层与存储过程的事务回滚
Spring中service层与存储过程的事务回滚
52 0
|
5月前
|
Java 数据库连接 mybatis
Springboot的service循环依赖
Springboot的service循环依赖