SpringBoot之基本介绍01

63 阅读2分钟

前言

想的再多,不如行动起来,大家好,我是啊Q,让我们徜徉在知识的海洋里吧。

一起“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第7天, 点击查看活动详情

boot各个包简介

本节主要是SpringBoot系列的第一小节,主要是介绍springboot下有哪些包以及包的作用和简单的原理分析。

1.boot project 介绍

2.spring-boot

spring-boot主要提供了boot的核心功能。springBoot启动类:SpringApplication以及相关类。

3.spring-boot-actuator

application.yml简单配置

management:
  endpoint:
    health:
      enabled: true  # 开启健康管理
      show-details: always # 总是显示详细信息
  endpoints:
    web:
      exposure:
        include: "*" # 开启所有web访问   exclude 是排除,注意下别写反了

4.spring-boot-autoconfigure 自动装配

原理

使用 SpringBootApplication 注解标记一个应用,EnableAutoConfiguration 注解就是主要用于导入加载组件用的。
EnableAutoConfiguration中的@Import({AutoConfigurationImportSelector.class})这个是重点 。
AutoConfigurationImportSelector 组件用于匹配筛选需要加载的组件。spring.factories 被加载过程:
getAutoConfigurationEntry() -> getCandidateConfigurations() -> SpringFactoriesLoader.loadFactoryNames()

AutoConfigure 装配原理

使用 spring.factories 配置文件加载,在创建boot-start项目时,创建该文件,在文件标记需要自动装配的类。
相当于标记一个功能注册的启动类位置。

列子:durid数据库连接池,durid也专门提供了自动配置支持 spring.factories中的内容是这样的:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure

5.spring-cli

简介

Spring Boot CLI (Command Line Interface)是一个命令行工具,可以快速搭建spring原型项目。可以使用Groovy脚本,脚本比较和java语法类似,非常简洁

6.spring-boot-devtools 热部署工具类

原理

其原理是使用监听程序监听重启事件,监听程序在调用重启类进行重启。
具体可以看类:
META-INF 下的 spring.factories LocalDevToolsAutoConfiguration
org.springframework.boot.devtools.restart.RestartApplicationListener
org.springframework.boot.devtools.restart.Restarter
org.springframework.boot.devtools.restart.RestartLauncher

监听过程:
1.FileSystemWatcher 类进行文件监听,具体查看 FileSystemWatcher.Watcher.scan()方法。原理是将比较一定时间内的前一个快照和当前
快照的不同,如果不同就重启。

2.RestartApplicationListener监听ApplicationEvent事件,当监听到重启事件(ApplicationStartingEvent)时,
将调用Restarter.initialize()方法重启应用。

3.继续调用start()方法,doStart()装载需要热部署的类和类加载器;relaunch(ClassLoader classLoader)方法执行重启应用方法。

过程分析:
技巧1:热部署时将不会重新加载lib下的三方包,可参考 DefaultSourceDirectoryUrlFilter的策略机制:COMMON_ENDINGS = { "/target/classes", "/bin" };
技巧2:通过 RestartLauncher.run() Method mainMethod = mainClass.getDeclaredMethod("main", String[].class); mainMethod.invoke(null, new Object[] { this.args }); 重启应用。
技巧3:通过 Restarter.immediateRestart() SilentExitExceptionHandler.exitCurrentThread(); main主线程抛出该异常,结束main线程。

7.spring-boot-starters

这些包都是springboot功能子项的启动包。

spring-boot-starter-tomcat:使用 Tomcat 作为嵌入式服务容器;作为默认嵌入式服务容器被spring-boot-starter-web使用。

spring-boot-starter-jdbc:通过 Tomcat JDBC 连接池使用JDBC