Spring Boot 使用及启动源码解析一
Posted 踩踩踩从踩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 使用及启动源码解析一相关的知识,希望对你有一定的参考价值。
前言
本篇文章会介绍Spring Boot 的基本原理 以及以及一些使用,常见的配置方式等,如何从单一架构延申到现在的前后端分离(垂直应用架构)的项目,从网站流量很小到现在的网站流量动则几百万上下的 发展, 加速前端的架构。到后面 的分布式服务架构。都是提升效率。
概述
通过 Spring Boot,您可以轻松创建独立的、生产级基于 Spring 的应用程序,您可以“运行”这些应用程序。我们对Spring平台和第三方库持固执己见的观点,因此您可以以最小的麻烦开始。大多数弹簧启动应用需要最少的弹簧配置。
特点
-
创建独立的弹簧应用程序,
-
直接嵌入雄猫,码头或底托(无需部署WAR文件)
-
提供固执己见的“启动器”依赖项,以简化构建配置
-
尽可能自动配置春季和第三方库
-
提供生产就绪功能,如指标、运行状况检查和外部化配置
-
绝对无需代码生成,也无需 XML 配置
这都是spring boot 的 提供给我们的优秀点,也是好用的地方。
而微服务的集成等,都是 集成来自于springboot 这是主流的一种方式。一定是逃不过的。
这里就涉及到一个概念,单体架构,soa架构 微服务架构
单体架构
all in one 将一个应用中所有服务都封装到一个应用中,无论什么系统,都将数据库,web等功能模块放到一个可执行文件中
SOA架构
面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
微服务架构
微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。
所以spring boot 也是基于上面框架的 基础 ,管理所有对象的同时,并且 在基础上 集成其他中间件,这也是spring boot 构建出来的。
简单的使用
我们需要从创建一个 Maven pom.xml
文件开始。pom.xml
是用于构建项目的配方。打开您喜欢的文本编辑器并添加以下内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0-SNAPSHOT</version>
</parent>
mvn dependency:tree
命令打印项目依赖项的树表示形式。您可以看到spring-boot-starter-parent
本身不提供任何依赖项。要添加必要的依赖项,请编辑pom.xml
并在parent
部分正下方添加spring-boot-starter-web
依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
最简单的使用方式
要完成我们的应用程序,我们需要创建一个 Java 文件。默认情况下,Maven 从 src/main/java
编译源代码,因此您需要创建该目录结构,然后添加一个名为 src/main/java/MyApplication.java
以包含以下代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class MyApplication
@RequestMapping("/")
String home()
return "Hello World!";
public static void main(String[] args)
SpringApplication.run(MyApplication.class, args);
@SpringBootApplication
在项目中最常见的设置方式
也可以使用 @SpringBootApplication 注解,好处是里面可以配置 可以重写的操作
- @SpringBootConfiguration ,本质是一个@Configuration配置类(类似一个SpringContext.xml文件),可以通过@Bean定义方法定义Bean。
- @EnableAutoConfiguration 自动配置类
- @ComponentScan 组件扫描类
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) )
public @interface SpringBootApplication
//略
继承 SpringBootServletInitializer 方式,对启动 以及打包的设置
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(XXXApplication】.class);
springboot项目,若打包成war包,使用外置的tomcat启动
1、需要继承 org.springframework.boot.context.web.SpringBootServletInitializer类
2、然后重写configure(SpringApplicationBuilder application)方法
Spring boot 配置文件
properties的方式
Common Application Properties (spring.io)
包括核心的一些配置文件方式,
主要是 key=value 的方式
YAML 文件的方式
YAML作为属性配置文件,通常以 .yml 或者 .yaml 为后缀名。
YAML对语法的要求比较严格:
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab键,必须使用空格缩进
缩进的空格数不重要,但是同级元素必须左侧对齐
‘#’ 表示注释
字符串无需加引号,如果加,单引号对与双引号对都可以
并且根据具体的值 会有提示 出来 对应的数据源等提示方式
有个 @configurationproperties 配置 方式
对于自定义的方式。 可以绑定 到具体的类上面 利用这个注解
只要对应的名字相同即可
SpringbootApplication 的启动源代码
springapplication.run 方法,之前的 初始化 当前 这个类要做的事情。
到主函数中,包括 resourceloader 设置等等
在属性的时候设置的 ,包括所有的 看存储的地方
进入 解析 判断 解析当前应用程序的类型。
到了后面的,加载 资源等。
这里涉及到 读取 所有的 加载 所有的 自动配置的文件数据, 加载类。
这里用来加载出来 对应 的 key 和value值, 并且反射出来。
这个方法中 进行 创建 实例化, 采用forname的方式, 找到 对象, 进行实例化类。
排好序,然后 将初始化的类,进行放到容器中。
找到主类。
准备完毕过后,进行 开始 启动 run方法
这里stopwatch 计算时间。
设置所有的awt 图像 化,
前置准备的过程
加载 springapplicationrunlistener
加载监听的动能。 提供 监听 的
把所有的listener 的factory 文件加载 所有的listener 类中数据。
包括部分的启动代码
在 启动中加载所有的listener 数据
监听器, eventpublish lish
都可以做一些监听功能,某些操作事件的监听功能等等,都是有些地方重要的事情。
准备当前环境 信息,包括所有的 环境配置等等。
包括所有的eventpubish 事件监听器 进行监听等等。
前置的处理等等。
后面的部分更多的是使用spring 中,包括 applicationcontext 创建 ,以及 refreshcontext 这也是 spring中很重要的部分, 这部分可以在spring框架中去查看。
以上是关于Spring Boot 使用及启动源码解析一的主要内容,如果未能解决你的问题,请参考以下文章