详解Spring Boot应用的启动和停止(start启动)
spring boot,作为spring框架对“约定优先于配置(convention over configuration)”理念的最佳实践的产物,它能帮助我们很快捷的创建出独立运行、产品级别的基于spring框架的应用,大部分spring boot应用只需要非常少的配置就可以快速运行起来,是一个与微服务(microservices)相当契合的微框架。
下面主要有两种方式进行spring boot的关闭:通过http发送shutdown信号,或者通过service stop的方式。
一、通过http发送shutdown信号关闭应用
该方式主要依赖spring boot actuator的endpoint特性,具体步骤如下:
1、在pom.xml中引入actuator依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency>
2、开启shutdown endpoint
spring boot actuator的shutdown endpoint默认是关闭的,因此在application.properties中开启shutdown endpoint:
#启用shutdown endpoints.shutdown.enabled=true #禁用密码验证 endpoints.shutdown.sensitive=false
指定路径、ip、端口
#指定shutdown endpoint的路径 endpoints.shutdown.path=/custompath #也可以统一指定所有endpoints的路径`management.context-path=/manage` #指定管理端口和ip management.port=8081 management.address=127.0.0.1
3、发送shutdown信号
shutdown的默认url为host:port/shutdown,当需要停止服务时,向服务器post该请求即可,如:
curl -x post host:port/shutdown
将得到形如{"message":"shutting down, bye..."}的响应
4、安全设置
可以看出,使用该方法可以非常方便的进行远程操作,但是需要注意的是,正式使用时,必须对该请求进行必要的安全设置,比如借助spring-boot-starter-security进行身份认证:
pom.xml添加security依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-security</artifactid> </dependency>
开启安全验证
在application.properties中变更配置
#开启shutdown的安全验证 endpoints.shutdown.sensitive=true #验证用户名 security.user.name=admin #验证密码 security.user.password=secret #角色 management.security.role=superuser
注意:如果引入了security框架后,按照上面的配置,那么全部请求都会要求输入账号密码才能访问。
二、部署为unix/linux service
该方式主要借助官方的spring-boot-maven-plugin创建"fully executable" jar ,这中jar包内置一个shell脚本,可以方便的将该应用设置为unix/linux的系统服务(init.d service),官方对该功能在centos和ubuntu进行了测试,对于os x和freebsd,可能需要自定义。具体步骤如下:
1、在pom.xml中引入插件:
<plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> <configuration> <executable>true</executable> </configuration> </plugin>
注意:标红部分的意思是是否是可以执行的。
2、赋予可执行权限:
chmod u+x app.jar
说明:到了这一步之后基本可以在命令行运行,先打包出jar包,然后启动,比如./app.jar start即可启动。
3、设置为系统服务
将你的应用打成jar包,部署到服务器,假设部署路径为/var/app,包名为app.jar,通过如下方式将应该设置为一个系统服务:
sudo ln -s /var/app/app.jar /etc/init.d/app
4. 以系统服务的方式管理
接下来,就可以使用我们熟悉的service foo start|stop|restart来对应用进行启停等管理了
sudo service app start|stop
命令将得到形如started|stopped [pid]的结果反馈
默认pid文件路径: /var/run/appname/appname.pid
默认日志文件路径: /var/log/appname.log
这可能是我们更熟悉也更常用的管理方式。
提示:上面的的日志和存放pid的文件根据不同的系统可能出现的位置不一样。
5、自定义参数
在这种方式下,我们还可以使用自定义的.conf文件来变更默认配置,方法如下:
1)在jar包相同路径下创建一个.conf文件,名称应该与.jar的名称相同,如appname.conf
2)在其中配置相关变量,如:
java_home=/usr/local/jdk java_opts=-xmx1024m log_folder=/custom/log
6、安全设置
- 作为应用服务,安全性是一个不能忽略的问题,如下一些操作可以作为部分基础设置参考:
- 为服务创建一个独立的用户,同时最好将该用户的shell绑定为/usr/sbin/nologin
- 赋予最小范围权限:chmod 500 app.jar
- 阻止修改:sudo chattr +i app.jar
- 对.conf文件做类似的工作:chmod 400 app.conf,sudo chown root:root app.conf
references:
1.installing spring boot applications
2.endpoints
3.securing sensitive endpoints
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Java虚拟机工作原理
推荐阅读
-
详解Spring Boot应用的启动和停止(start启动)
-
详解Spring Boot应用的启动和停止(start启动)
-
详解spring boot 以jar的方式启动常用shell脚本
-
Spring Boot启动过程(六)之内嵌Tomcat中StandardHost、StandardContext和StandardWrapper的启动教程详解
-
Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start教程详解
-
详解spring boot 以jar的方式启动常用shell脚本
-
Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start教程详解
-
Spring Boot的应用启动与关闭的方法
-
mysql服务的启动和停止 net stop mysql net start mysql
-
详解spring boot应用启动原理分析