SpringBoot之部署以及Maven打包切换环境

前言:之前一直用的  Java-jar 运行的,但是部署的时候得停止服务 通过端口kill 掉的,最近在推酷上发现一个安全关闭springboot的博客 ,所以自己整理(搬运)一下。

方式一:通过shell命令启动 关闭

1.1 后台运行

nohup java -jar 文件名.jar  --spring.profiles.active=prod >output 2>&1  &

1.2 关闭服务

#!/bin/bash
PID=$(ps -ef | grep 文件名.jar | grep -v grep | awk ‘{ print $2 }‘)
if [ -z "$PID" ]
then
    echo 服务已关闭
else
    echo 关闭服务中 $PID
    kill $PID
fi

方式二:通过 HTTP 发送 shutdown 信号

该方式主要依赖 Spring Boot Actuator 的 endpoint 特性,具体步骤如下:

2.1  在 pom.xml 中引入 actuator 依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.2  开启 shutdown endpoint

Spring Boot Actuator 的 shutdown endpoin t默认是关闭的,因此在 application.properties 中开启 shutdown endpoint :

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.3  发送 shutdown 信号

shutdown 的默认 url 为 host:port/shutdown ,当需要停止服务时,向服务器post 该请求即可,如:

curl -X POST host:port/shutdown

将得到形如 {"message":"Shutting down, bye..."} 的响应

2.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

方式三:部署为Unix/Linux Service

该方式主要借助官方的 spring-boot-maven-plugin 创建”Fully executable” jar ,这中jar包内置一个shell脚本,可以方便的将该应用设置为Unix/Linux的系统服务(init.d service),官方对该功能在CentOS和Ubuntu进行了测试,对于OS X和FreeBSD,可能需要自定义。具体步骤如下:

3.1  在 pom.xml 中引入插件

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

3.2  设置为系统服务

将你的应用打成jar包,部署到服务器,假设部署路径为/var/app,包名为app.jar,通过如下方式将应该设置为一个系统服务:

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

3.3 赋予可执行权限:

chmod u+x app.jar

3.4  以系统服务的方式管理

sudo service app start|stop 

接下来,就可以使用我们熟悉的service foo start|stop|restart来对应用进行启停等管理了

命令将得到形如 Started|Stopped [PID] 的结果反馈

默认PID文件路径:/var/run/appname/appname.pid默认日志文件路径:/var/log/appname.log

这可能是我们更熟悉也更常用的管理方式。

自定义参数

在这种方式下,我们还可以使用自定义的.conf文件来变更默认配置,方法如下:

在jar包相同路径下创建一个.conf文件,名称应该与.jar的名称相同,如appname.conf
在其中配置相关变量,如:
JAVA_HOME=/usr/local/jdk
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/custom/log

安全设置

作为应用服务,安全性是一个不能忽略的问题,如下一些操作可以作为部分基础设置参考:

为服务创建一个独立的用户,同时最好将该用户的shell绑定为/usr/sbin/nologin
赋予最小范围权限: chmod 500 app.jar
阻止修改: sudo chattr +i app.jar
对.conf文件做类似的工作: chmod 400 app.conf , sudo chown root:root a
两种方式,我都弄了一下,

  第一种HTTP方式我发现在jenkins中想批处理停掉服务并启动有点麻烦,如果直接执行curl -X POST host:port/shutdown命令的话安全性就有问题,所以得集成 security,需要验证通过才能执行。每次部署前手动停掉感觉会多此一举,所以我选择了第二种方式。

  第二种方式的话需要设置 <configuration><executable>true</executable></configuration>,在这个环节居然与我集成的mybatis有关系(我之前xml只需要写相对的类名就行了,不需要写完整的路径,方便之后的改实体类的包路径),所以花了好大一会时间修改所有的xml的包路径

原文链接 https://my.oschina.net/wangnian/blog/714719

时间: 2024-10-06 04:27:09

SpringBoot之部署以及Maven打包切换环境的相关文章

Idea开发环境中搭建Maven并且使用Maven打包部署程序

1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path中 备注:必须要有JAVA_HOME的M2_HOME环境变量,不然Maven会提示错误.配置环境变量如图所示: c.如果想要修改Maven的本地仓库位置,则可以直接在Maven的安装目录下找到conf文件下的setting配置文件中,设置localRepository为本地仓库位置 <localRepository>E:\java

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(三)(网内首发超详细版)

3.3 权限配置样例 注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义. * 对权限配置文件的修改立即生效,不必重启svn. 用户组格式: [groups] = , 其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔. 版本库目录格式: [<版本库>:/项目/目录] @<用户组名> = <权限> <用户名> = <权限> 其中,方框号内部分可以有多种写法: [/],表示根目录及以下,根目录是svnserve启动时指定的,我们

spring-boot结合maven配置不同环境的profile

1.在spring-boot中新建配置文件 spring-boot不同环境配置文件格式为application-{profile}.yml 说明: 如果application.yml中的配置和application-{profile}.yml相冲突时,application.yml中的配置会被覆盖掉. 2.在application.yml中增加属性 spring: profiles: active: @[email protected]说明:如果想要获取mvn中设置的属性变量,需要使用@mvn变

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(四)(网内首发超详细版)

6安装maven 下载地址:http://maven.apache.org/download.cgi 解压安装 unzip –o apache-maven-3.2.1-bin.zip mv apache-maven-3.2.1 maven 配置环境变量 MAVEN_HOME=/usr/local/maven export PATH=$MAVEN_HOME/bin:$PATH 7 java环境自动构建部署 7.1 新建job 输入名称如下图 输入SVN服务器地址 注意:上面已经认证过了,因此没有报

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(一)(网内首发超详细版)

目录结构如下: 目录 1说明及环境介绍3 1.1说明3 1.2环境准备及格式约定4 2 Linux下apache搭建svn服务器4 2.1 apache安装部署4 2.2 svn安装部署5 2.3整合svn和apache6 2.4 ssl方式部署apache7 2.4.1安装apache7 2.4.2安装svn7 2.4.2 部署认证8 3 Linux下svn独立服务器方式部署9 3.1安装SVN9 3.2 配置环境10 3.3 权限配置样例11 3.4 启动SVN服务器12 3.5 访问方式1

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(二)(网内首发超详细版)

2.4 ssl方式部署apache 2.4.1安装apache ./configure --prefix=/usr/local/apache2 --enable-dav --enable-ssl--enable-so --enable-mods-shared=all make && make install 2.4.2安装svn 安装apr-1.4.6.tar.gz.apr-util-1.5.1.tar.gz.neon-0.29.6.tar.gz同2.2章节部分 unzip sqlite-

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(五)(网内首发超详细版)

8 Subversion FAQ 8.1 官方FAQ网址 http://subversion.apache.org/faq.zh.html 8.2 svn遇到错误总结 8.2.1 svn不显示日志 解决办法:1)找到你SVN版本库下conf文件夹下的svnserve.conf文件2)打开svnserve.conf文件,将其中名为anon-access的一项设置为anon-access=none. 这样的话,日志文件即可显示正常. 8.2.2 版本冲突问题 svn update --usernam

Eclipse Maven profiles 多环境配置,测试环境与开发环境分开打包

1.将开发环境.测试环境.生产环境的配置文件分开存放,如下图: 2.在Maven中配置不同的环境打包配置文件的路径,配置如下: <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <!-- 默认激活该profile节点-->

Maven 打包项目 部署到服务器 重启服务 插件

1.maven插件wagon-maven-plugin自动部署远程Linux服务器  (http://xxgblog.com/2015/10/23/wagon-maven-plugin/) <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>1.0</version> <c