Spring Boot 使用及启动源码解析一

2023-11-19

前言

本篇文章会介绍Spring Boot 的基本原理 以及以及一些使用,常见的配置方式等,如何从单一架构延申到现在的前后端分离(垂直应用架构)的项目,从网站流量很小到现在的网站流量动则几百万上下的 发展, 加速前端的架构。到后面 的分布式服务架构。都是提升效率。

概述

通过 Spring Boot,您可以轻松创建独立的、生产级基于 Spring 的应用程序,您可以“运行”这些应用程序。我们对Spring平台和第三方库持固执己见的观点,因此您可以以最小的麻烦开始。大多数弹簧启动应用需要最少的弹簧配置。

特点

  • 创建独立的弹簧应用程序,

  • 直接嵌入雄猫,码头或底托(无需部署WAR文件)

  • 提供固执己见的“启动器”依赖项,以简化构建配置

  • 尽可能自动配置春季和第三方库

  • 提供生产就绪功能,如指标、运行状况检查和外部化配置

  • 绝对无需代码生成,也无需 XML 配置

这都是spring boot 的 提供给我们的优秀点,也是好用的地方。

而微服务的集成等,都是 集成来自于springboot  这是主流的一种方式。一定是逃不过的。

这里就涉及到一个概念,单体架构,soa架构 微服务架构

单体架构

all in one 将一个应用中所有服务都封装到一个应用中,无论什么系统,都将数据库,web等功能模块放到一个可执行文件中

SOA架构

面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

微服务架构

微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。

所以spring boot 也是基于上面框架的 基础 ,管理所有对象的同时,并且 在基础上 集成其他中间件,这也是spring boot  构建出来的。

简单的使用

Getting Started (spring.io)

我们需要从创建一个 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框架中去查看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 使用及启动源码解析一 的相关文章

随机推荐

  • 自定义view实现半圆弧进度条

    文章目录 一 效果图 二 使用步骤 1 新建CustomView继承自view 2 定义变量 3 构造函数 4 构造方法 5 初始化数据 6 onMeasure 7 onSizeChanged 8 onDraw 9 xml文件 三 完整代码
  • js给json对象增加、删除、修改属性

  • JS对象详解(对象创建及属性类型)

    目录 创建对象 属性类型 1 数据属性 2 访问器属性 3 定义多个属性 4 读取属性的特性 对象规则设置 1 冻结 2 密封 3 扩展 对象 ESMAScript把对象定义为 无序属性的集合 其属性可以包含基本值 对象或者函数 简单来说
  • ajax extend,GitHub - YuChenLi923/extend-ajax: an AJAX request library

    extend ajax Features ability to specify request headers ability to get response headers if it isn t jsonp it can cache r
  • 在Vue项目使用kindEditor富文本编译器

    1 第一步 npm install kindeditor 2 第二部 新建一个kindeditor组件
  • Anaconda python windows环境安装及完全排坑教程

    本文篇幅较长 浏览器下搜索关键信息请直接使用ctrl F关键词查找 点击以下内容空降 Anaconda是什么 1 0篇 anaconda初体验 1 Anaconda3的安装 pycharm部分 额外内容 2 0篇 当你使用了anaconda
  • bat批处理for /f命令

    含有 F的for详细说明 含有 F的for有很大的用处 在批处理中使用的最多 用法如下 格式 FOR F options i IN file DO command FOR F options i IN string DO command F
  • python读取.csv文件时报错解决方案(无法打开“parsers.pyx”: 找不到文件)

    版权声明 本文为CSDN博主 Jayden yang 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net qq 41997920 article details
  • Class 06 - 良好的编码习惯(保持代码的可读性)

    Class 06 良好的编码习惯 保持代码的可读性 保持代码的可读性 编码风格 命名的注意事项 文件名 对象名称 语法 运算符 逗号 中括号和小括号 大括号 代码缩进 代码的长度 赋值 注释 调试报错 保持代码的可读性 在编写 R语言 或任
  • SpringBoot2.X配置SSL(https访问)

    一 application yml配置 application yml配置 XXX keystore放到项目根目录下与pom xml同级 server port 443 ssl key store XXX keystore 生成的证书名字
  • Linux 挂载目录

    1 查看当前磁盘的情况 fdisk l root dmp3 fdisk l WARNING fdisk GPT support is currently new and therefore in an experimental phase
  • 3. 决策树原理及数学建模实战

    决策树 文章目录 一 概念 二 ID3 2 1 概念 2 2 算法流程 2 3 信息熵 2 4 特点 三 C4 5 3 1 概念 3 2 信息增益率 3 3 处理连续值 3 4 过拟合问题 3 4 1 提出 3 4 2 剪枝 四 CART
  • sqli-labs靶场Less-7

    备注 虽然从首页进来就知道是dump into outfile 但我还是假设按不知道的流程来一步步尝试 这样才会印象深刻 不然我觉得失去练习的意义了 1 访问首页 Less 7 index php id 1 这里的传参点是id 探测六步 判
  • LDO(低压差线性稳压器)设计电源注意事项(学习笔记)

    1 LDO最大输出电流 按照2 3原则选择 即电路总消耗电流的3 2倍 若电路总消耗电流50 mA 那么LDO的最大输出电流为75mA 2 封装散热以及功耗 功耗 输入电压 输出电压 工作电流 按照1 2原则选择LDO封装 达不到的可以PC
  • 多个js文件调用函数问题

    多个js文件调用函数问题 最近在做一个项目 用的 jquery 和 easyui 有很多常用的函数我就把它们写到了common js里面 然后又写了一link jsp 把常用的css和js文件都写在里面 然后页面直接include 写着写着
  • 蒸馏神经网络(Distill the Knowledge in a Neural Network)

    本文是阅读Hinton 大神在2014年NIPS上一篇论文 蒸馏神经网络的笔记 特此说明 此文读起来很抽象 大篇的论述 鲜有公式和图表 但是鉴于和我的研究方向 神经网络的压缩十分相关 因此决定花气力好好理解一下 1 Introduction
  • vuepress-yarn-nodes-静态网页_个人博客搭建

    nodes官网 https nodejs org en 先下载nodes进行安装 一般nodes会自带包管理器npm 注意npm与nodes的对应关系 除了npm之外还有yarn包管理器 一般会用npm安装这个包 npm install g
  • esp32cam门禁系统简易教程

    esp32cam门禁系统简易教程 人脸识别 1 环境安装 最好有梯子 arduino IDE 1 官网下载地址 选择相应版本下载Windows ZIP file 无脑安装 2 配置IDE 打开IDE 文件 gt 首选项 gt 附加开发板管理
  • Android属性动画

    http bbs itheima com thread 172632 1 1 html 什么是Android属性动画 属性动画 Property Animation 系统是一个健壮的动画框架系统 它可以满足你大部分动画需求 不管动画对象是否
  • Spring Boot 使用及启动源码解析一

    前言 本篇文章会介绍Spring Boot 的基本原理 以及以及一些使用 常见的配置方式等 如何从单一架构延申到现在的前后端分离 垂直应用架构 的项目 从网站流量很小到现在的网站流量动则几百万上下的 发展 加速前端的架构 到后面 的分布式服