每日总结spring

前言

本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。

一、Spring Boot基础应用

Spring Boot特征

概念:

约定优于配置,简单来说就是你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时才需要对约定进行替换配置。

特征:

1. SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。

2,使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。

3.自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们。

4.使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个jar包。

Spring Boot创建

Spring Boot项目结构图:

 

Spring Boot热部署

通过引入spring-bootdevtools插件,可以实现不重启服务器情况下,对项目进行即时编译。引入热部署插件的步骤如下:

1. 在pom.xml添加热部署依赖

 

2. IDEA热部署工具设置

 

3. 在项目任意页面中使用组合快捷键“Ctrl+Shift+Alt+/”打开Maintenance选项框,选中并打开Registry页面,列表中找到“compiler.automake.allow.when.app.running”,将该选项后的Value值勾选,用于指定IDEA工具在程序运行过程中自动编译,最后单击【Close】按钮完成设置。

 

热部署原理:

基本原理就是我们在编辑器上启动项目,然后改动相关的代码,然后编辑器自动触发编译,替换掉历史的.class文件后,项目检测到有文件变更后会重启srpring-boot项目。内部主要是通过引入的插件对我们的classpath资源变化进行监听,当classpath有变化,才会触发重启。

 

从官方文档可以得知,其实这里对类加载采用了两种类加载器,对于第三方jar包采用baseclassloader来加载,对于开发人员自己开发的代码则使用restartClassLoader来进行加载,这使得比停掉服务重启要快的多,因为使用插件只是重启开发人员编写的代码部分。

 

排除资源:

默认情况下,改变资源 /META-INF/maven , /META-INF/resources , /resources , /static , /public ,或 /templates 不触发重新启动,但确会触发现场重装。如果要自定义这些排除项,则可以使用该spring.devtools.restart.exclude 属性。例如,仅排除 /static , /public 在application.properties设置以下属性。

spring.devtools.restart.exclude=static/**,public/**,config/**

全局配置文件优先级

优先级:以下图顺序号代表配置文件的优先级,并且相同配置文件按顺序加载可以实现互补,但是不会被覆盖。

 

注意:Spring Boot 有application.properties 和 application.yaml 两种配置文件的方式,yaml是一种JSON超文本格式文件,如果是2.4.0之前版本,优先级properties>yaml;但是如果是2.4.0的版本,优先级yaml>properties。

自定义application.properties 配置文件注入IOC容器

 

 

填加相应依赖配置可以实现在自定义配置properties配置提示

 

@ConfigurationProperties(prefix = "person")注解的作用是将配置文件中以person开头的属性值通过setXX()方法注入到实体类对应属性中。

@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有这样才能被@ConfigurationProperties注解进行赋值。

application.yaml配置文件

YAML文件格式是Spring Boot支持的一种JSON超集文件格式,以数据为中心,比properties、xml等更

适合做配置文件.

1.yml和xml相比,少了一些结构化的代码,使数据更直接,一目了然

2.相比properties文件更简洁

3.yaml文件的扩展名可以使用.yml或者.yaml。

4.application.yml文件使用 “key:(空格)value”格式配置属性,使用缩进控制层级关系。

 

属性注入

如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并读取这些配置文件中的属性值并覆盖默认属性。

@Configuration:声明一个类作为配置类。

@Bean:声明在方法上,将方法的返回值加入Bean容器。

@Value:属性注入

 

 

@ConfigurationProperties(prefix = "jdbc"):批量属性注入。

 

@PropertySource("classpath:/jdbc.properties")指定外部属性文件,在类上添加。

第三方配置:

@ConfigurationProperties 用于注释类之外,您还可以在公共 @Bean 方法上使用它。将属性绑定到控件之外的第三方组件

 

 

松散绑定:

Spring Boot使用一些宽松的规则将环境属性绑定到@ConfigurationProperties bean,因此环境属性名和bean属性名之间不需要完全匹配,比如在application.properties文件里定义一个first-name=tom,在对应bean类中使用firstName也能获取到对应的值,这就是松散绑定。

 

 

Spring Boot日志框架

 

SLF4J 的使用:

 

注意:由于每一个日志的实现框架都有自己的配置文件,所以在使用 SLF4j 之后,配置文件还是要使用实现日志框架的配置文件。

统一日志框架使用:

实现步骤

1. 排除系统中的其他日志框架。

2. 使用中间包替换要替换的日志框架。

3. 导入我们选择的 SLF4J 实现。

 

从图中我们得到一种统一日志框架使用的方式,可以使用一种要替换的日志框架类完全一样的 jar 进行替换,这样不至于原来的第三方 jar 报错,而这个替换的 jar 其实使用了 SLF4J API. 这样项目中的日志就都可以通过 SLF4J API 结合自己选择的框架进行日志输出。

Spring Boot 的日志关系:

 

Spring Boot 默认已经使用了 SLF4J + LogBack . 所以我们在不进行任何额外操作的情况下就可以使用 SLF4J + Logback 进行日志输出。SLF4J 日志级别从小到大trace,debug,info,warn,error,默认是info级别。

自定义日志输出:

可以在配置文件编写日志相关配置实现自定义日志输出。

 

替换日志框架:

 

原文连接:Spring Boot框架知识总结(超详细,一次性到位) - 知乎 (zhihu.com)

posted @ 2023-12-25 12:03  橘子味芬达水  阅读(4)  评论(0编辑  收藏  举报