一、spring boot 核心概述
spring boot 是简化 spring 应用开发的框架,作为 spring 技术栈的整合方案和 j2ee 开发的一站式解决方案,其核心优势体现在:
- 快速创建独立运行的 spring 项目,轻松集成主流框架
- 内置 servlet 容器(如 tomcat),无需打包为 war 包即可部署
- 提供 starters 机制,实现自动依赖管理与版本控制,减少版本冲突问题
- 大量自动装配功能简化开发流程,同时支持自定义默认配置
- 零 xml 配置、无代码生成,真正实现开箱即用
- 内置准生产环境的运行时监控功能,便于项目运维
- 与云计算天然适配,满足现代部署需求
二、微服务架构详解
1. 微服务的定义与演进
2014 年,martin fowler 提出微服务架构理念(参考文档:microservices guide)。从技术演进路径看,架构风格经历了:servlet → ssh → ssm → 单体应用 → soa → spring cloud 的发展过程。
微服务的核心定义为:一种将应用拆分为多个小型、独立业务服务的架构风格。每个服务具备独立处理逻辑和轻量通讯机制,可部署在单个或多个服务器上,是松耦合、具有有界上下文的面向服务架构。
- 单体应用:所有功能模块集中在一个应用中(all in one)
- 微服务:每个功能元素都是可独立替换和升级的软件单元,通过 http 等协议实现服务间通信
2. 微服务的优缺点
优势 | 缺点 |
---|---|
聚焦单一业务功能,服务体积小巧 | 分布式系统操作复杂,运维成本高 |
支持 2-5 人小团队独立开发 | 可能存在重复开发工作 |
松耦合设计,开发与部署独立 | 问题跟踪困难,排查成本高 |
支持多语言开发 | 服务数量增加后,管理复杂度指数上升 |
易于集成自动化部署和持续集成 | - |
便于理解、修改和维护 | - |
可按需扩展,资源利用更高效 | - |
支持中低端服务器部署 | - |
易于与第三方系统集成 | - |
数据存储灵活(独立数据库或统一数据库) | - |
三、spring boot 开发环境准备
1. 环境约束
- jdk:1.8 及以上(推荐 1.8.0_112 版本)
- maven:3.x 版本(推荐 3.3 以上)
- 开发工具:intellij idea 2017+ 或 sts
- spring boot 版本:本文以 2.0.2.release 为例(基于 spring 5)
2. maven 配置
在 maven 的 settings.xml
配置文件的 profiles
标签中添加:
<profile> <id>jdk‐1.8</id> <activation> <activebydefault>true</activebydefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerversion>1.8</maven.compiler.compilerversion> </properties> </profile>
3 idea设置
四、spring boot 入门实战(hello world)
1. 实现步骤
- 创建 maven 工程(选择 jar 类型)
- 导入依赖:
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.5.9.release</version> </parent> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies>
- 编写主程序类:
@springbootapplication public class helloworldmainapplication { public static void main(string[] args) { springapplication.run(helloworldmainapplication.class, args); } }
- 编写 controller:
@controller public class hellocontroller { @responsebody @requestmapping("/hello") public string hello() { return "hello world!"; } }
- 运行测试:执行主程序的 main 方法,访问
http://localhost:8080/hello
- 简化部署:添加打包插件后,使用
mvn package
打包,通过java -jar
命令运行
<build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build>
2. 核心原理探究
(1)pom 文件分析
- 父项目:
spring-boot-starter-parent
的父项目是spring-boot-dependencies
,它是版本仲裁中心,管理所有依赖版本,因此导入依赖时通常无需指定版本。 - 启动器(starter):
spring-boot-starter-web
是 web 场景启动器,自动导入 web 开发所需的组件(如 spring mvc、tomcat 等)。spring boot 将不同功能场景封装为 starters,开发者只需导入对应 starter 即可快速集成功能。
(2)主程序类注解分析
@springbootapplication
是核心注解,由以下注解组成:
/** * @springbootapplication 来标注一个主程序类,说明这是一个spring boot应用 */ @springbootapplication public class helloworldmainapplication { public static void main(string[] args) { // spring应用启动起来 springapplication.run(helloworldmainapplication.class,args); } }
@springbootconfiguration:标识为 spring boot 配置类,内部包含 @configuration
注解,说明配置类也是容器组件(@component
)。
@target(elementtype.type) @retention(retentionpolicy.runtime) @documented @inherited @springbootconfiguration @enableautoconfiguration @componentscan(excludefilters = { @filter(type = filtertype.custom, classes = typeexcludefilter.class), @filter(type = filtertype.custom, classes = autoconfigurationexcludefilter.class) }) public @interface springbootapplication {
@enableautoconfiguration:开启自动配置,包含:
@autoconfigurationpackage:通过 @import
导入 autoconfigurationpackages.registrar
,将主配置类所在包及子包下的组件扫描到 spring 容器。以前我们需要配置的东西,spring boot帮我们自动配置;@enableautoconfiguration告诉springboot开启自动配置功能;这样自动配置才能生效;
@autoconfigurationpackage:自动配置包
@import(enableautoconfigurationimportselector.class):从 meta-inf/spring.factories
中加载自动配置类(xxxautoconfiguration
),自动配置场景所需组件,替代手动配置。spring的底层注解@import,给容器中导入一个组件;导入的组件由autoconfigurationpackages.registrar.class;将主配置类(@springbootapplication标注的类)的所在包及下面所有子包里面的所有组件扫描到spring容器;
@import(enableautoconfigurationimportselector.class);
给容器中导入组件?enableautoconfigurationimportselector:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxautoconfiguration);就是给容器中导入这个场景需要的所有组件,
并配置好这些组件;
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;springfactoriesloader.loadfactorynames(enableautoconfiguration.class,classloader);
spring boot在启动的时候从类路径下的meta-inf/spring.factories中获取enableautoconfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;
到此这篇关于spring boot 与微服务详细总结的文章就介绍到这了,更多相关spring boot微服务内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论