前言

本章我们主要从以下几个方面夯实我们的基础:

  1. 微框架 Spring Boot 的基本认识
  2. 实战学习 Spring Boot 的基本使用
  3. 多种方式获取 Spring Boot 配置
  4. 如何自定义一个 Starter
  5. 如何搭建一个 Spring Boot 的监控系统

什么是 Spring Boot

Spring Boot 简介

  1. 微框架,与 Spring 4 一起诞生,比如 RestController
  2. 可以快速上手,整合了一些子项目(开源框架或者第三方开源库)
  3. 可以依赖很少的配置就可以十分快速的搭建并且运行项目
  4. 基于 Spring,使开发者快速入门,门槛很低,(Spring 全家桶里面的一员)
  5. Spring Boot 可以创建独立运行的应用而不依赖于容器
  6. 不需要打包成 war 包,可以放到 Tomcat 中直接运行
  7. 提供 Maven 的极简配置,缺点就是会引入很多你不需要的包
  8. 根据项目来依赖,从而配置 Spring,需要什么配什么
  9. 提供可视化的相关功能,方便监控,比如性能、应用的健康程度等
  10. 简化配置,不用再看过多的 XML,通过去 XML 化,来引入注解化
  11. 为微服务 Spring Cloud 铺路,Spring Boot 可以整合很多格式各样的框架来构建微服务,比如 Dubbo、Thrift 等

Spring Boot 的亮点

我们知道,在 Spring Boot 中并没有新增什么新的技术。Spring Boot 是服务于 Spring 框架的框架,它有着 4 个亮点我们应该知道。

1. 自动装配

Spring Boot 会根据某些规则对所有配置的 Bean 进行初始化。可以减少了很多重复性的工作。比如使用 MongoDB 时,只需要在 pom.xml 中加入 MongoDB 的 Starter 包,然后配置 MongoDB 的连接信息,就可以直接使用 MongoTemplate 自动装配来操作数据库了。

2. 内嵌容器

Spring Boot 应用程序可以不用部署到外部容器中,比如 Tomcat。Spring Boot 应用程序可以直接通过 Maven 命令编译成可执行的 jar 包,通过 java-jar 命令启动即可,非常方便。

3. 应用监控

Spring Boot 中自带监控功能 Actuator,可以实现对程序内部运行情况进行监控,比如 Bean 加载情况、环境变量、日志信息、线程信息等。当然也可以自定义跟业务相关的监控,通过 Actuator 的端点信息进行暴露。

4. Starter 包简化框架集成难度

将 Bean 的自动装配逻辑封装在 Starter 包内部,同时也简化了 Maven Jar 包的依赖,对框架的集成只需要加入一个 Starter 包的配置,降低了烦琐配置的出错几率。

Spring Boot 的基本使用

创建 Spring Boot 项目

第一种方式:https://start.spring.io/。

第二种方式:通过 IDEA 创建 Spring Boot 项目。

1. 创建新项目:

2. 选择构建方式和 JDK 版本:

3. 填写项目相关信息:

4. 选择依赖:

5. 点击 NEXT,点击 FINISH 后,我们得到项目结构如下:

第一步,我们打开 pom.xml 文件:

我们可以看到此时我们使用的 Spring Boot 的版本是 2.3.0.RELEASE。

第二步,我们需要对项目进行配置,我们添加一个 application.properties 文件,我们首先来配置一下 Tomcat 的端口号,当然端口号我们也可以不配置,默认为 8080。

application.properties

server.port=8888

第三步,我们创建一个简单的 Controller,老规矩,HelloWorld 走起。

最后一步,我们只需要运行 Spring Boot 的启动类即可。

启动类 SpringcloudstudyApplication:

启动日志:

我们看到 端口号为:8888。

然后我们在地址栏中输入 localhost:8888/hello

至此,一个简单的 Spring Boot 项目已经创建成功。

如何获取 Spring Boot 项目配置文件中配置的属性值

配置启动属性

我们在实际的项目中,经常会有多个配置文件,比如我们在本地开发的时候,我们需要连接本地数据库。上传到测试服务器上的时候,需要连接测试服务器的数据库。部署到正式服务器上的时候,我们又会连接正式库。

如果我们只有一个配置文件,那么我们每次发布的时候都要手动修改配置文件,实在是太麻烦了,而且很容易出错。

如何解决呢?

在 Spring Boot 中,我们可以为本地,测试服,正式服,都定义一个单独的配置文件,然后在 application.properties 中配置 spring.profiles.active 来确定我们应该使用哪一个配置文件。

我们来创建两个配置文件 application-test.properties、application-dev.properties。

application-test.properties

server.port=8888

application-dev.properties

server.port=6666

application.properties

spring.profiles.active=dev

此时我们来运行 Spring Boot 启动类:

我们发现此时的端口号已经变成 6666,也就是说我们的配置生效了。

代码中获取配置的属性值

那么我们如何在代码中获取到配置的属性值呢?在 Spring Boot 中获取配置属性值的方式有三种:

  1. @value 注解
  2. @ConfigurationProperties
  3. Environment

@value 注解

@Value 是比较常见的注入方式,功能强大但一般可读性较差。

我们创建一个 ConfigurationController,代码如下:

在 ConfigurationController 中定义一个 port 字段,在 port 上使用 @Value 注入当前项目的端口值,冒号后面是在无值的情况下给的默认值,避免没配置值的报错问题。

首先,我们配置文件中配置 spring.name=ToBeTopJavaer 时,我们来启动项目,运行 localhost:9999/config

然后我们将配置文件中的 spring.name=ToBeTopJavaer 去掉,我们来启动项目,运行 localhost:9999/config

我们发现值已经变成了注解中的默认值了。

Environment

通过注入获取 Environment 对象,然后再获取定义在配置文件的属性值。

代码如下:

@ConfigurationProperties

@ConfigurationProperties 作用在类上,用于注入 Bean 属性,然后再通过当前 Bean 获取注入值。

首先我们定义一个 Person 类:

配置文件:

Controller:

然后我们来启动项目,运行 localhost:9999/config:

我们看到,我们已经将 java.name 的值读了出来。

如何自定义一个 Starter

Starter 可以说是 Spring Boot 的一个核心功能。

我们知道,当我们搭建一个项目的时候,我们需要依赖很多的 jar 包,即使使用的 Maven 我们也还是需要在 pom.xml 中写入很多的 XML 来引入 jar 包。

Starter 的出现,改变了现状,我们只要在 xml 中引入相关的 Starter 就行。但是并非说我们不需要引入别的 jar 包,只是我们通过了 Starter 自动配置我们需要的相关 jar 包,Starter 相当于个开关或是启动器,当我们引入的时候,就相当于打开或者启动了跟我们引入的 Starter 相关 jar 包的自动配置,而不需要我们在一个个的自己去写引入。

那么如果我们想将我们自己写的某个功能模块变成 Starter,当我们在别的功能模块需要引用的时候,只需要引入这个 Starter 就行,我们改如何操作呢?

首先我自己总结了下自定义个 Starter 的步骤,分为以下几步:

  1. 创建一个 MyStarter 的工程
  2. 创建一个配置类
  3. 创建一个自动配置类,实现 bean 的自动装配
  4. 创建 spring.factories,在 Spring Boot 启动时会根据此文件来加载项目的自动化配置类
  5. (非必须)创建一个配置提示文件 spring-configuration-metadata.json,可以在我们启动项目时,在控制台中提示我们该 Starter 的作用

下面我们开始动手实现我们自己的 Starter。

首先我们按照上述创建 Spring Boot 项目的步骤新建一个 MyStarter 工程,创建好后,工程结构如下:

Pom.xml

第二步,编写一个实体类映射信息 OrderProperties 类,使用@ConfigurationProperties 来注入配置信息,然后定义一个 OrderService 类。

OrderProperties

第三步,编写一个配置类,用于装配 OrderService,将 OrderService 类托管到 IOC 容器中。

第四步,最重要的一步,开启自动装配功能。

最后一步,也是最重要的一步,新建 META-INF 文件夹,然后创建 spring.factories 文件,里面指定需要被装配的类。

spring.factories

最后在 mystarter 工程中执行 mvn clean install 即可。

打开上面我们创建的 springcloudstudy 工程,在 pom 文件中引入刚刚自定义的 Starter,即可。

Spring Boot 监控

Spring Boot Admin 是一个开源的 Web 项目,用于管理和监控 Spring Boot 应用程序的运行状态。在 Spring Boot 项目中可以通过集成 Spring Boot Admin Client 向 Spring Boot Admin Server 进行注册,这样我们就可以在 Spring Boot Admin Server 统一管理 Spring Boot 应用。

Spring Boot Admin 的主要功能点:

  • 显示健康状况
  • 显示细节
  • 显示生成信息号
  • 跟踪并下载日志文件
  • 查看 JVM 系统 & 环境属性
  • 查看 Spring Boot 配置属性
  • 支持 Spring Cloud 的 postable/env-&/ 刷新端点
  • 简单的日志级管理
  • 与 jmx-bean 交互
  • 查看线程转储
  • 查看 HTTP 跟踪
  • 查看审计事件
  • 查看 HTTP 端点
  • 查看计划任务
  • 查看和删除活动会话(使用 Spring 会话)
  • 查看天桥/Liquibase 数据库迁移
  • 下载堆转储
  • 关于状态更改的通知(通过电子邮件、Sack、Hipchat)
  • 状态更改事件日志(非持久性)

下面我们就来搭建一下 Spring Boot Admin。

第一步,我们先建一个 Admin-Server 的项目,用来启动 Spring-Boot-Admin 服务,我们需要在 pom.xml 文件中引用 spring-boot-admin-starter-server 的依赖。然后我们需要在启动类上增加 @EnableAdminServer 的注解,最后启用 Spring Boot Admin Server。

pom.xml

配置文件 application.yml:

启动类 AdminServerApplication:

启动成功后,我们登陆 localhost:9999:

此时我们发现应用数,实例数都为 0。

接下来我们创建一个 Admin-Client 项目,用来向 Spring-Boot-Admin 注册服务或者实例,我们需要在 pom.xml 文件中引用 spring-boot-admin-starter-client 的依赖。然后我们需要在启配置文件指定 Spring-Boot-Admin 的服务地址,最后启用 Admin-Client。

pom.xml

配置文件 application.yml:

我们启动成功后去刷新之前的界面:

现在我们的 Admin-Client 服务实例已经注册到了 Admin-Server 上了。

我们点击 Wallboard 进去查看详细信息,界面如下:

里面的指标很多,就不一一介绍,希望同学们能在日后的工作中,慢慢的了解和学习。

总结

本文主要是带领大家回顾一下日常工作中经常使用的 Spring Boot 常规知识点,从对 Spring Boot 的基本认识到基本使用,以及如何自定义一个自己的 Starter,最后还帮助大家搭建了一个 Spring Boot Admin 项目用来监控项目的基本健康情况。

学无止境,大家再接再厉,努力学习,早日成为大牛。

本文首发于公众号【ToBeTopJavaer】,《深入SpringCloud微服务》系列正在激情连载中,大家一起努力!!!

深入SpringCloud微服务

原创不易,如果大家喜欢,赏个三连吧。和大家一起成为这世界上最优秀的人。

.metadata是什么项目文件_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?相关推荐

  1. 如何给老婆解释什么是微服务?

    程序员有了老婆之后就是累,上次好不容易给她解释了什么是Restful,这不,麻烦又来了- 一个周日的清晨,阳光洒在我的脸上,慢慢把我唤醒.我翻过身,感觉好像少了些什么东西,缓缓地睁开眼睛," ...

  2. 如何给老婆解释什么是微服务?(文末有福利)

    戳蓝字"CSDN云计算"关注我们哦! 程序员有了老婆之后就是累,上次好不容易给她解释了什么是Restful,这不,麻烦又来了- 一个周日的清晨,阳光洒在我的脸上,慢慢把我唤醒.我翻 ...

  3. hget如何获取多个value_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?...

    前言 本章我们主要从以下几个方面夯实我们的基础: 微框架 Spring Boot 的基本认识 实战学习 Spring Boot 的基本使用 多种方式获取 Spring Boot 配置 如何自定义一个 ...

  4. 微服务精华问答 | 如何理解中台战略和微服务

    戳蓝字"CSDN云计算"关注我们哦! 微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之.今天,就让我们来看看关于微 ...

  5. 【微服务】唱吧DevOps的落地,微服务CI/CD的范本技术解读

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  6. 一键部署dns服务_OpenShift : 通往云原生、DevOps、微服务和Serverless的大门

    新书速递 查尔斯·狄更斯的<双城记>中有句耳熟能详的名言:"这是一个最好的时代,也是一个最坏的时代."作为技术从业者,在这个数字化浪潮和技术变革接连发生的时代,我对这句 ...

  7. 从0开始的微服务架构:(一)重识微服务架构

    2019独角兽企业重金招聘Python工程师标准>>> 导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微 ...

  8. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  9. Re:从0开始的微服务架构:(一)重识微服务架构

    导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上 ...

最新文章

  1. 不理解Zookeeper一致性原理,谈何异地多活改造
  2. python输出个人信息_Python如何输出警告信息
  3. 为什么python画不了图-解决python中使用plot画图,图不显示的问题
  4. 查询数据(使用聚合函数,还是单表)
  5. 一个fork的面试题
  6. matlab处理abaqus_Abaqus/用Abaqus进行参数分析(python+maltab助攻)
  7. Sharepoint学习笔记---Linq to Sharepoint--查询语法
  8. php编译自己库文件,php编译后追加库模块-gd库
  9. P6619-[省选联考2020A/B卷]冰火战士【树状数组二分】
  10. 谷歌、阿里巴巴他们都来了,你呢?
  11. 爬取亚马逊评论_如何利用插件抓取亚马逊评论和关键词?
  12. 用于语音情绪识别的基于对抗学习的说话人无关的表示
  13. hive 修改cluster by算法_Spark SQL连接 Hive源码深度剖析
  14. java操作seaweedfs
  15. IP欺骗攻击原理及如何修改IP
  16. 教你如何设计ASP网上考试系统
  17. vb雅西高速计算机考试,2016年高中信息技术学业水平考试VB程序复习题.doc
  18. 李刚疯狂java抄袭,推荐:疯狂java讲义--李刚著作(3)
  19. 博世自动驾驶的“改革开放”
  20. 我的blog已经放在MSN空间上面了.

热门文章

  1. 史上最详细的Linux网卡ifcfg,史上最详细的Linux网卡ifcfg-eth0配置详解
  2. java static method_java 中static的几种用法
  3. mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引
  4. linux 进程监控命令2——ps
  5. 计组之存储系统:1、存储系统的概念与基本组成(层次、分类、性能指标、基本结构、寻址)
  6. 数据结构之栈的应用:表达式求值
  7. 计算机网络之应用层:4、电子邮件、SMTP、MIME、POP3
  8. (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转
  9. ElasticSearch 未授权访问记录(端口:9200)
  10. ubuntu下安装mssql(sqlserver)客户端及使用