构建微服务的基础框架:Spring Boot
1.Spring Boot除了它是Spring Cloud的基础之外,优点还有:自动化配置、快速开发、轻松部署等。墙裂推荐使用Spring Boot来构建微服务,还可以轻松简单整合Spring Cloud实现系统服务化。避免传统Spring构建方式带来的依赖管理。
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项目,注意红色标记。
-
导入解压后的项目包并导入,如下图:
ps: Spring Boot基础结构有三大块:
- src/main/java:主程序入口:DemoApplication,可以通过直接运行此类来启动SpringBoot应用。
- src/main/resources:配置目录。
- src/test:单元测试目录。
-
maven 配置简单分析:
-
打开pom.xml 文件,如下图示:
-
打开pom.xml 文件,如下图示:
PS: Spring Boot 的Starter POMs 采用 spring-boot-starter-* 的命名方式,* 代表一个特别的应用功能模块,比如web、test。
-
实现RESTful API
- 启动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 文件。
- 配置文件。Spring Boot的默认配置文件位置为:src/main/java/resources/application.properties,引入不同的 starter 模块。除了支持传统的 properties文件之外,还支持现在被广泛推荐的 YAML 文件。
- 自定义参数。除了设置各个Starter 模块中的预定义的配置属性,也可以在application.properties 中添加我们需要的自定义属性。eg:
-
参数应用 在application.properties 中的各个参数之间可以直接通过使用 PlaceHolder的方式来应用,像下面设置:
-
使用随机数。eg.秘钥、服务端口等,需要被加载的时候,不是一个固定的值,这时可以考虑 ${random} 配置来生产随机的int、long或String等,达到在配置中随机生成属性,而不是在代码中实现逻辑。常见配置方式如下:
-
命令行参数。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 配置文件内容。
-
加载顺序。
-
监控与管理。Starter POMs 中有一个特殊的依赖模块:spring-boot-starter-actuator。引入该模块将自动为Spring Boot构建的应用提供一系列的 用于监控的端点。
- 初识 actuator。 在 pom.xml 的dependency节点中新增:spring-boot-starter-actuator 的依赖即可。如图:
- 原生端点。根据端点的作用可以将原生端点分为三类:
- 应用配置类。/autoconfig:positiveMatches和negativeMatches、/beans、/configprops、/env、/mappings、/info。
- 度量指标类。/metrics、/health、/dump、/trace、/
- 操作控制类。在原生端点中,只提供了一个用来关闭应用 的端点:/shutdown。可以用如下配置开启它:endpoints.shutdown.enabled=true
- 初识 actuator。 在 pom.xml 的dependency节点中新增:spring-boot-starter-actuator 的依赖即可。如图:
谢谢你,读到这里。。。
Less is more.