SpringBoot详细研究-04部署测试与监控

这部分的内容实际就是devops的主要工作内容,当然一名合格的程序要也需要掌握这部分的知识。

  • 热部署

简单来说,在开发时,修改了任何的代码,IDE将自动编译运行及发布;在发布时,当前发布不影响线上服务的正常进行。

模板热部署:比如Thymeleaf,配置spring.thymeleaf.cache=false即可,那么页面随时更新。

开发热部署: Spring Loaded,在vm arg中添加 –javaagent: E:\xxx.jar -noverify; JRebel,热部署最佳工具,但是是收费的,不嗨森;spring-boot-devtools,最赞方案,只需添加到pom.xml即可。

  • 常规部署

jar形式: mvn package, java –jar xx.jar, 通过在pom.xml中修改plugin配置即可。

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

在linux的/etc/systemd/system/目录中新建cm-bootweb.service文件
[Unit]
Description=cm-bootweb
After=syslog.target
[Service]
ExecStart= /usr/bin/java –jar /var/apps/cm-bootweb-0.0.1.jar
[Install]
WantedBy=multi-user.target

 
启动服务: systemctl start cm-bootweb
停止服务: systemctl stop cm-bootweb
服务状态: systemctl status cm-bootweb
开机启动: systemctl enable cm-bootweb
项目日志: systemctl -u cm-bootweb

war形式:将生成的war放在合适的servlet容器上运行即可。

  • 云部署(最帅选择)

主要的Paas平台都支持Docker镜像发布,通过编写Dockerfile来编译镜像,Dockerfile的指令如下表所示。

指令

阐述

FROM

指明当前镜像继承的基镜像,编译时会自动下载,如FROM Ubuntu

MAINTAINER

指明镜像作者, MAINRAINER xionger

RUN

可以在当前镜像上执行linux命令形成新的层,RUN /bin/bash –c "echo helloworld"

CMD

指明启动镜像容器的默认行为, CMD echo "this is my first docker project"

EXPOSE

指明镜像运行时的容器必须监听的端口

ENV

设置环境变量, ENV name=xionger

ADD

将当前工作目录的文件复制到镜像目录, ADD test.txt /mydir/

ENTRYPOINT

让容器相同一个可执行程序一样运行,这样镜像运行时可以像软件一样接受参数执行 ENTRYPOINT ["/bin/echo"] docker run –d image_name "this is a rebirth"

安装docker, yum install docker, 启动运行, systemctl start docker

将jar包放在/var/apps/cm-bootweb目录,并将Dockerfile也放在该目录,文件内容为

FORM java:8
MAINTAINER xionger
ADD cm-bootweb-0.0.1.jar app.jar
EXPOSE 8083
ENTRYPOINT ["java", "-jar","/app.jar"]

之后编译镜像:docker build –t cm-bootweb . (.表示当前路径,cm-bootweb为镜像名称)

运行: docker run –d --name bootweb -p 8083:8083 cm-bootweb

这部分需要好好思考下,就是linux环境中是必须安装好java,maven等环境,还是直接打好jar包,直接发布

Spring boot提供了运行时的应用监控和管理功能,可以通过http,jmx,ssh协议来操作,可以自动得到审计、健康及指标信息,常见的端点名如下。

端点名

描述

actuator

所有EndPoint列表,需加入spring HATEOAS支持

autoconfig

当前应用的所有自动配置

beans

当前应用中所有bean的信息

configprops

当前应用中所有的配置属性

dump

当前应用线程状态信息

env

当前应用环境信息

health

当前应用健康状况

info

当前应用信息

metrics

当前应用的各项指标信息

mappings

显示所有@RequestMapping映射的路径

shutdown

关闭当前应用(默认关闭)

trace

显示跟踪信息(默认最新http请求)

通过http监控spring boot项目非常简单,只需添加如下依赖即可,之后访问对应项目即可(如果添加了安全,需要对应的actuator角色)。

1         <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-actuator</artifactId>
4         </dependency>
5         <dependency>
6             <groupId>org.springframework.hateoas</groupId>
7             <artifactId>spring-hateoas</artifactId>
8         </dependency>

Tip:

通过该网站可以获取maven配置,http://mvnrepository.com/artifact/org.springframework.hateoas/spring-hateoas

定制端点:修改端点id,endpoints.beans.id=mybeans;关闭端点,endpoints.beans.enabled=false;定制端点访问路径management.context-path=/manage;定制访问端口management.port=8080, -1关闭。

自定义端点:通过继承AbstractEndpoint类并实现ApplicationContextAware接口,创建自定义的端点类并注册到spring即可。

自定义HealthIndicator: 常见的Indicator包括datasource, jms, diskspace, redis等。

jconsole来实现JMX监控,在cmd输入jconsole命令,然后选择项目,查看MBean中的org.springframework.boot中的Endpoint即可。

SSH监控,需要添加spring-boot-starter-remote-shell依赖,然后访问2000端口即可,常见命令包括help, metrics等,可以在配置文件中加入shell.auth.simple.user.name/password,此外还可以通过Groovy来编制命令,有机会试试。

测试:springboot在创建时会自动加上spring-boot-starter-test依赖,因此测试变得非常简单,只需在测试类上添加@RunWith(SpringRunner.class)和@SpringBootTest注解即可。

参考资料

  1. 汪云飞. Spring Boot实战[M]. 北京:电子工业出版社, 2016.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏搜云库

Ubuntu 17.04 x64 安装 Docker CE

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测...

368100
来自专栏云计算

使用ACS和Kubernetes部署Red Hat JBoss Fuse

Red Hat JBoss Fuse十多年来一直是构建Java Web / RESTful服务的事实标准。但是,你该如何在当今以云为中心的世界中有效运行?如您所...

286100
来自专栏Python爬虫与算法进阶

Pycharm插件推荐:Docker integration

在设置-Plugins-BROWSE REPOSITORIES… 中搜索“Docker”

98720
来自专栏JMCui

Docker 系列五(Docker Compose 项目).

    Docker Compose 是官方编排项目之一,负责快速的部署分布式应用。它允许用户通过一个单独的 docker-compose.yml 模板文件(Y...

10320
来自专栏BestSDK

基于Docker的PHP开发环境

【编者的话】本文作者是Geoffrey,他是一个PHP的Web开发者,喜欢DevOps和Docker。本文主要介绍了如何使用Docker构建PHP的开发环境,文...

34690
来自专栏吴伟祥

Docker学习——Docker 三剑客(七) 顶

19210
来自专栏云计算教程系列

如何在Ubuntu 18.04上使用Traefik作为Docker容器的反向代理

Docker可以是在生产中运行Web应用程序的有效方法,但您可能希望在同一个Docker主机上运行多个应用程序。在这种情况下,您需要设置反向代理,因为您只想公开...

52620
来自专栏yukong的小专栏

mac os下使用 Docker安装 oracle数据库

在mac os需要通过docker-toolbox安装docker 你可以在这里下载docker-toolbox

47120
来自专栏偏前端工程师的驿站

CentOS6.5菜鸟之旅:U盘安装CentOS64位

一、前言                                      之前下载了个CentOS7 32位版,一下就安装成功了,但由于其目录结构等与...

34550
来自专栏bboysoul

在docker中使用MySQL数据库

我是一直想把所有的程序都跑在docker里面,这样一方面是为了便于管理,另外一方面也可以增强自己对docker的理解,所以今天我就想学习一下最重要的数据库部分

16020

扫码关注云+社区

领取腾讯云代金券