Spring Boot
2022-11-16 17:47:37 23 举报
AI智能生成
SpringBoot脑图
作者其他创作
大纲/内容
SpringBoot初级
SpringBoot概述
概念
SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻 辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度 上缩短了项目周期。
Spring缺点
配置繁琐
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多 XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。 Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所 以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但它要求的回报也不少。
依赖繁琐
项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导 入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发 进度。
SpringBoot功能
自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖 ,这些东西加在一起即支持某项功能。
简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
辅助功能
提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。
SpringBoot快速入门
实现步骤
创建Maven项目
导入SpringBoot起步依赖
定义Controller
编写引导类
启动测试
小结
SpringBoot在创建项目时,使用jar的打包方式。
SpringBoot的引导类,是项目入口,运行main方法就可以启动项目。
使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样。
SpringBoot 起步依赖原理分析
起步依赖
spring-boot-starter-parent
spring-boot-starter-web
小结
在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。
在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程。
我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在 版本冲突等问题。
SpringBoot配置
配置文件分类
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置。
properties:
server.port=8080
yml:
server:
port: 8080
port: 8080
小结
SpringBoot提供了2种配置文件类型:properteis和yml/yaml
默认配置文件名称:application
在同一级目录下优先级为:properties > yml > yaml
YAML
YAML全称是 YAML Ain't Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅 读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP 等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml。
举例分类
properties
server.port=8080
server.address=127.0.0.1
server.address=127.0.0.1
xml
<server>
<port>8080</port>
<address>127.0.0.1</address>
</server>
<port>8080</port>
<address>127.0.0.1</address>
</server>
yml
server:
port: 8080
address: 127.0.0.1
port: 8080
address: 127.0.0.1
基本语法
大小写敏感
数据值前边必须有空格,作为分隔符
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
数据格式
对象(map):键值对的集合
person:
name: zhangsan
# 行内写法
person: {name: zhangsan}
name: zhangsan
# 行内写法
person: {name: zhangsan}
数组:一组按次序排列的值
address:
- beijing
- shanghai
# 行内写法
address: [beijing,shanghai]
- beijing
- shanghai
# 行内写法
address: [beijing,shanghai]
纯量:单个的、不可再分的值
msg1: 'hello \n world' # 单引忽略转义字符
msg2: "hello \n world" # 双引识别转义字符
msg2: "hello \n world" # 双引识别转义字符
参数引用
name: lisi
person:
name: ${name} # 引用上边定义的name值
person:
name: ${name} # 引用上边定义的name值
读取配置文件内容
@Value
Environment
@ConfigurationProperties
profile
我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。
profile配置方式
多profile文件方式
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
yml多文档方式
在yml中使用 --- 分隔不同配置
profile激活方式
配置文件
在配置文件中配置:spring.profiles.active=dev
虚拟机参数
在VM options 指定:-Dspring.profiles.active=dev
命令行参数
java–jarxxx.jar --spring.profiles.active=dev
内部配置加载顺序
1. file:./config/:当前项目下的/config目录下
2. file:./ :当前项目的根目录
3. classpath:/config/:classpath的/config目录
4. classpath:/ :classpath的根目录
加载顺序为上文的排列顺序,高优先级配置的属性会生效
外部配置加载顺序
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
SPringBoot高级
SpringBoot原理分析
自动配置
Condition
Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作。
小结
自定义条件
定义条件类:自定义类实现Condition接口,重写 matches 方法,在 matches 方法中进行逻辑判断,返回
boolean值 。 matches 方法两个参数:
boolean值 。 matches 方法两个参数:
context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等。
metadata:元数据对象,用于获取注解属性。
判断条件: 在初始化Bean时,使用 @Conditional(条件类.class)注解
SpringBoot 提供的常用条件注解:
ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean
切换内置web服务器
SpringBoot的web环境中默认使用tomcat作为内置服务器,其实SpringBoot提供了4中内置服务器供我们选择,我们可 以很方便的进行切换。
@Enable*注解
SpringBoot中提供了很多Enable开头的注解,这些注解都是用于动态启用某些功能的。而其底层原理是使用@Import注 解导入一些配置类,实现Bean的动态加载。
@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。而@Import提供4中用 法
导入Bean
导入配置类
导入 ImportSelector 实现类。一般用于加载配置文件中的类
导入 ImportBeanDefinitionRegistrar 实现类。
@EnableAutoConfiguration 注解
@EnableAutoConfiguration 注解内部使用 @Import(AutoConfigurationImportSelector.class)来加载配置类。
配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载 这些配置类,初始化Bean
并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean
监听机制
Java 监听机制
SpringBoot 的监听机制,其实是对Java提供的事件监听机制的封装。
Java中的事件监听机制定义了以下几个角色:
事件:Event,继承 java.util.EventObject 类的对象
事件源:Source ,任意对象Object
监听器:Listener,实现 java.util.EventListener 接口 的对象
SpringBoot 监听机制
SpringBoot 在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成 一些操作。
监听器接口
ApplicationContextInitializer
可以用作在Bean构造之前进行一些资源检查校验。
SpringApplicationRunListener
CommandLineRunner
可以用作缓存数据的预加载。
ApplicationRunner
可以用作缓存数据的预加载。
启动流程分析
SpringBoot监控
概述
SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、配置属性 、日志信息等。
监控使用
步骤
导入依赖坐标 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> </dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> </dependency>
访问http://localhost:8080/acruator
使用
/beans
描述应用程序上下文里全部的Bean,以及它们的关系
/env
获取全部环境属性
/env/{name}
根据名称获取特定的环境属性值
/health
报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/info
获取应用程序的定制信息,这些信息由info打头的属性提供
/mappings
描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
/metrics
报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/metrics/{name}
报告指定名称的应用程序度量值
/trace
提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)
Spring Boot Admin
简介
Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。
Spring Boot Admin 有两个角色,客户端(Client)和服务端(Server)。
应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册
Spring Boot Admin Server 的UI界面将Spring Boot Admin Client的Actuator Endpoint上的一些监控信息。
使用步骤
admin-server
创建 admin-server 模块
导入依赖坐标 admin-starter-server
在引导类上启用监控功能@EnableAdminServer
admin-client
创建 admin-client 模块
导入依赖坐标 admin-starter-client
配置相关信息:server地址等
spring.boot.admin.client.url=http://localhost:9000
management.endpoint.health,show-details=always
management.endpoints.web.exposure.include=*
启动server和client服务,访问server
SpringBoot项目部署
SpringBoot 项目开发完毕后,支持两种方式部署到服务器:
jar包(官方推荐)
Jar包是SpringBoot默认的,不需要做任何修改(使用内置tomecat)
war包(使用外置的tomcat)
修改pom文件,<packaging>war</packaging>
继承一个接口,重写一个方法
@SpringBootApplicartion
pulic class SpringbootDeployApplication extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(SpringbootDeployApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(SpringbootDeployApplication.class);
}
}
pulic class SpringbootDeployApplication extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(SpringbootDeployApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(SpringbootDeployApplication.class);
}
}
在访问接口的时候需要注意,因为WEB-INF路径下面才有application.properties文件(外置的配置文件),所以需要指定目录,在localhost:8080/springboot/xxxx(springboot虚拟目录)
0 条评论
下一页