Chapter two《SpringCloud微服务实战》

构建微服务的基础框架:Spring Boot

1.Spring Boot除了它是Spring Cloud的基础之外,优点还有:自动化配置快速开发轻松部署等。墙裂推荐使用Spring Boot来构建微服务,还可以轻松简单整合Spring Cloud实现系统服务化。避免传统Spring构建方式带来的依赖管理。
image.png

  • Spring Boot的宗旨并非要重写Spring或者替代Spring,而是设计大量的自动化配置等方式来 简化 Spring原有样板化的配置。遵循“习惯优于配置”的理念(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置。)

  • Spring Boot还通过一系列的 Starter POMs 的定义,让我们整合各项功能的时候,不需要在 Maven的 pom.xml 中维护那些错综复杂的依赖关系,而是通过类似模块化的 Starter 模块定义来 引用,使得依赖管理工作变得easy.

  • 解释:REST -- REpresentational State Transfer,英语的直译就是“表现层状态转移”。说人话:RESTful:URL定位资源,用HTTP动词(GET,POST,PUT,DELETE)描述操作。RESTful API就是一套协议来规范多种形式的前端和同一个后台的交互方式。

    • Resource:资源,即数据。
    • Representational:某种表现形式,比如用JSON,XML,JPEG等;
    • State Transfer:状态变化。通过HTTP动词实现。
  • Spring Boot 核心功能##

    • Spring Boot可以以 jar包的形式独立运行。运行一个Spring Boot项目只需要通过 java -jar XXX.jar 来运行。
    • 内嵌Servlet容器。 Spring Boot可选择内嵌Tomcat、Jetty和Udertow,无须再以war包部署项目。
    • 提供Starter简化 Maven 配置。 Spring提供了一系列的 starter pom 来简化Maven的依赖加载。
    • 自动配置Spring。Spring Boot会根据在类路径中的jar包、类,为 jar包里的类自动配置Bean(只考虑了大部分开发场景,有的需要手动配。)
    • 准生产的应用监控。Spring Boot提供基于http、ssh、telnet 对运行时的项目进行监控。
    • 无代码生产和 xml 配置。

2.快速搭建

  • 构建maven项目:
    访问:http://start.spring.io 下图以maven构建Spring Boot项目,注意红色标记。

    image.png

  • 导入解压后的项目包并导入,如下图:
    image.png

    ps: Spring Boot基础结构有三大块:

    • src/main/java:主程序入口:DemoApplication,可以通过直接运行此类来启动SpringBoot应用。
    • src/main/resources:配置目录。
    • src/test:单元测试目录。
  • maven 配置简单分析:

    • 打开pom.xml 文件,如下图示:
      image.png
      image.png

PS: Spring Boot 的Starter POMs 采用 spring-boot-starter-* 的命名方式,* 代表一个特别的应用功能模块,比如web、test。

  • 实现RESTful API
    image.png
    image.png
    • 启动Spring Boot应用方式有多种:1.作为 Java 程序,找main函数;2.在maven 中,通过spring-boot插件,可以使用它来启动,比如:mvn spring-boot:run命令;3.在服务器上部署运行时,首先 mvn install 将应用打包成 jar 包,再通过 java -jar XXX.jar来启动应用。
  • 编写单元测试
    • 手写配套的单元测试的习惯,在微服务架构中非常重要。尤其是这些单元测试可以支持我们未来可能会进行的重构。在 src/test 下的测试入口类:DemoApplicationTests 模拟HTTP请求,测试 /hello 接口。
  • 配置详解
    • 配置文件。Spring Boot的默认配置文件位置为:src/main/java/resources/application.properties,引入不同的 starter 模块。除了支持传统的 properties文件之外,还支持现在被广泛推荐的 YAML 文件。
      image.png
      有YAML 的配置方式可以看到,配置信息简单、易懂,此外,YAML 还可以在一个单一的文件中通过使用spring profiles属性来定义多个不同的环境配置,eg:在指定为测试 test 环境时,server.port将使用8882;而在生产 prod 环境,server.port=8883;如果没有指定环境,默认使用8881端口。
      image.png
      image.png
  • 自定义参数。除了设置各个Starter 模块中的预定义的配置属性,也可以在application.properties 中添加我们需要的自定义属性。eg:
    image.png
    然后,可以通过 @Value 注解来加载我们定义的参数。
    image.png
    PS:注意点:
    image.png
  • 参数应用 在application.properties 中的各个参数之间可以直接通过使用 PlaceHolder的方式来应用,像下面设置:
    image.png
  • 使用随机数。eg.秘钥、服务端口等,需要被加载的时候,不是一个固定的值,这时可以考虑 ${random} 配置来生产随机的int、long或String等,达到在配置中随机生成属性,而不是在代码中实现逻辑。常见配置方式如下:
    image.png
  • 命令行参数。eg: java -jar XXX.jar --server.port=8888命令 等价于在 application.properties中添加属性 server.port=8888。
    通过命令行来修改属性值是Spring Boot非常重要的一个特性。通过此特性,理论上已经使得应用的属性在启动前是可变的,所以,其中的端口号、数据库连接等,都是可以在应用启动时发生改变的。PS:如果每个参数都要通过命令行来指定,这显然不是一个好方案,所以看下面:如何在SpringBoot中实现 多环境的配置
  • 多环境配置。多环境配置的文件名需要满足格式:application-{profile}.properties,其中,{profile}对应你的环境标识,如下:
    • application-dev.properties:开发环境
    • application-test.properties:测试环境
    • application-prod.properties:生产环境
      至于哪个配置文件会被加载,需要在 application.properties文件中通过spring.profiles.active 属性来设置,其值对应文件中的{profile}值。eg:spring.profiles.active=test 就会加载 application-test.properties 配置文件内容。
  • 加载顺序
    image.png
    image.png
  • 监控与管理。Starter POMs 中有一个特殊的依赖模块:spring-boot-starter-actuator。引入该模块将自动为Spring Boot构建的应用提供一系列的 用于监控的端点
    • 初识 actuator。 在 pom.xml 的dependency节点中新增:spring-boot-starter-actuator 的依赖即可。如图:
      image.png
    • 原生端点。根据端点的作用可以将原生端点分为三类:
      • 应用配置类。/autoconfig:positiveMatches和negativeMatches、/beans、/configprops、/env、/mappings、/info。
      • 度量指标类。/metrics、/health、/dump、/trace、/
      • 操作控制类。在原生端点中,只提供了一个用来关闭应用 的端点:/shutdown。可以用如下配置开启它:endpoints.shutdown.enabled=true

谢谢你,读到这里。。。
Less is more.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容