轻量级微服务架构【读书笔记2】
1. Spring Boot 是什么(What)
Spring Boot 是为生产级 Spring 应用而生的,它使得开发 Spring 应用程序更加高效、简洁。
1.1 由来
Spring 1.0 时代,习惯用XML来配置Bean,可以轻松的进行依赖注入,不过当Bean的数量越来越多时,XML配置就会越来越复杂。
Spring 2.0 时代,在XML的命名空间上做了优化,让配置看起来尽可能简单,但仍然没有解决配置上的问题。
Spring 3.0 时代,可以使用 Java 注解来取代曾经的 XML 配置。
Spring 4.0 时代,可以连 XML 配置文件都不在需要了,完全使用 Java 源码级别的配置与 Spring 提供的注解快速的开发出 Spring 应用。
但是,传统的 Java Web 的运行模式,我们将 war 包 部署到 Web Server 上,才能对外提供服务,能否运行一个简单的 main()方法就能启动一个Web Server ? Spring Boot 满足了我们的需求。
1.2 特性(features)
1)可创建独立的 Spring 应用程序:所有应用程序都是一个个独立的jar包,直接运行带有@SpringBootApplication,SpringBoot在内部嵌入一个Web Server而已。但依旧可以传统war包方式来部署到 Web Server中。
2)提供嵌入式 Web Server(无须部署 war 包):默认启动 Tomcat,可以在application.properties文件中配置具体的端口号。当然,可以通过在 Maven 配置文件中天健相关的 Web Server插件。
3)无任何代码生成技术也无任何 XML 配置 :除了一个 application.properties 配置文件,Spring Boot 再无其他配置文件,而且所有插件的相关配置也在这个唯一的配置文件中。
4)自动化配置:其实Spring Boot中不一定要有 application.properties 文件,很懂配置项目有其默认值,我们只需要启动相关注解。Spring Boot 提供了一系列 @ConditionOnXxx 条件注解来实现,底层使用 Spring 4.0 的 Condition 接口。
5)提供一系列生成级特性:例如核心指标、健康指标、外部配置。需要在maven中配置 spring-boot-starter-actuator 。
6)提供开箱即用的 Spring 插件:只需要添加一段Maven 依赖配置即可开启使用。
1.3 相关插件
- SQLAPI —— JDBC、JPA等
- 关系数据库 —— MySQL、PostgreSQL等
- 内存数据库 —— H2、HSQLDB、Derby等
- NoSQL 数据库 —— Redis、MongoDB等
- 消息队列 —— RabbitMQ、Artemis等
- 分布式事务 —— Atomikos、Bitronix等
- 模板引擎 —— Velocity、Freemarker、Mustache等
1.4 应用场景
- 传统的 Web MVC 架构
- 前后端分离架构
- 微服务架构
2. 如何使用 Spring Boot 框架【参考官网】
2.1 搭建 Spring Boot开发框架(工作中使用IDEA创建Maven项目)
2.2 开发一个简单的 Spring Boot 应用程序
2.3 运行 Spring Boot 应用程序:在 IDEA 中直接运行、使用 Maven 运行、使用 Java 命令运行
3. Spring Boot 生产级特性
Actuator 插件提供了大量生产级特性,可以通过 Maven 配置使用该插件:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3.1 端点
- autoconfig : 获取自动配置信息
- beans :获取 Spring Bean 基本信息
- configprops :获取配置项信息
- dump :获取当前线程基本信息
- env : 获取环境变量信息
- health :获取健康检查信息
- info :获取应用基本信息
- metrics :获取性能指标信息
- mappings : 获取请求映射信息
- trace :获取请求调用信息
3.2 跨域
曾经使用JSONP来实现跨域问题,但它有明显的限制,只支持GET请求,如果我们需要JSONP发送POST请求就不太可能。需要通过其他手段,如iframe,限制我么选择CORS来实现跨域问题。【请查看】
3.3 远程监控