主题
SpringBoot4.x
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Release-Notes
SpringBoot3.x
核心:约定大于配置
5板斧
1.pom文件导入依赖
2.设置配置文件
3.定义启动类
4.定义控制器
5.启动项目Starters是一组资源依赖描述,解决了各个jar包之间的依赖关系
1、入门
1、入门:创建项目、引入依赖
2、一文讲透Starter:9类Starter、自定义Starter
3、启动流程剖析
2、配置管理
在 Spring Boot 中,其核心设计理念是对配置信息的管理采用约定优于配置
。
- 把 Spring 中基于 XML 的功能配置方式转换为 Java Config
- 提供了 .yml 文件来优化原有基于 .properties 和 .xml 文件的配置方案,.yml 文件对配置信息的组织更为直观方便,语义也更为强大。
- 基于 Spring Boot 的自动配置特性,对常见的各种工具和框架均提供了默认的 starter 组件来简化配置
其精髓: 帮我们配置了什么,能不能改,能修改哪些配置,能不能扩展等
。
xxxxAutoConfiguration帮我们给容器中自动配置组件
xxxxProperties配置类来封装配置文件的内容
比如覆写Spring Security 中 WebSecurityConfigurerAdapter.configure() 的方法来完成自定义的用户认证配置工作
案例:
- 自动配置原理
- 自动配置报告
- 配置管理注意点
- 循环依赖
- 核心配置文件
- 配置文件的加载顺序
- 排除某些自动配置
- 条件注解
- AutoConfigurationImportSelector
- bootstrap与application的区别
- ConditionalOn
- SpringBootApplication注解
- ConfigurationProperties
- @Primary和@Qualifier的区别
- Bean的作用域并测试
- Import注解的4种方式
- Profile
- PropertySources
- Runner
- 配置https
- 同时支持HTTP和HTTPS
- SPI机制
- 表达式语言SpEL
3、web层
1、核心组件
Handler、HandlerMapping、HandlerAdapter
Handler是用来做具体事情的,对应的是Controller里面的方法。所有有@RequestMapping的方法都可以被看作一个Handler。
HandlerMapping是用来找到Handler的,是请求路径与Handler的映射关系
。
HandlerAdapter是一个适配器。它是用来跟具体的Handler配合使用的。
DispatcherServlet最核心的方法是doDispatch,主要做了4件事:
根据请求找到Handler -> 根据Handler找到对应的HandlerAdapter -> 用HandlerAdapter处理Handler -> 处理经过以上步骤的结果
2、模版引擎
模板引擎是一种将数据和模板结合生成可读文档的工具。在Web开发中,模板引擎主要用于动态生成HTML页面,但也可以用于生成XML、JSON或其他格式的文本文件。Spring Boot支持多种模板引擎,如Thymeleaf、Freemarker、Mustache等。
- Thymeleaf:这是Spring Boot默认的模板引擎,它能够很好地与Spring框架集成。Thymeleaf是一个现代的、功能丰富的模板引擎,支持HTML5,XHTML,XML,JavaScript,CSS等。它具有良好的表达式语言,可以轻松地从模型对象中获取数据,并且在开发阶段支持HTML静态检查。
- Freemarker:Freemarker是一个强大的模板引擎,使用基于C-like语法的模板语言。它非常灵活,可以生成任何基于文本的格式,包括HTML、XML、LaTeX、PostScript等。Freemarker的主要优势在于其性能和灵活性,适用于大型项目或需要高性能渲染的场景。
- Mustache:Mustache是一个逻辑less的模板引擎,这意味着它不包含控制结构(如if语句或for循环),而是依赖于数据模型来填充模板。这种设计使得Mustache模板更易于阅读和维护,因为它更接近最终输出的HTML。Mustache非常适合生成简单的HTML页面,或者当数据模型足够复杂以包含所有必要的逻辑时。
在Spring Boot中配置模板引擎非常简单,只需要在pom.xml
中添加相应的依赖,并在application.properties
或application.yml
中设置一些基本的配置即可。例如,对于Thymeleaf,你可以这样配置:
xml
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
properties
# application.properties
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
每种模板引擎都有其特点和适用场景,选择哪种取决于你的具体需求。例如,如果你正在构建一个需要高度动态内容的网站,Thymeleaf可能是一个更好的选择。而如果你需要一个高性能的解决方案,Freemarker可能是更好的选择。如果项目较小,或者你想要一个简单、直观的模板系统,那么Mustache可能是一个不错的选择。
案例:
- 集成FreeMarker
- 注册Servlet
- 内嵌Web容器
- 构建RESTful风格的Web服务
- Jackson中对null的处理
- 接口文档
- 跨域问题
- RestTemplate使用方法
- RestTemplate远程调用实现原理
4、数据访问层
0、JDBC规范中的核心编程对象
JDBC(Java Database Connectivity)规范定义了一系列的接口和类,用于在Java应用程序中访问关系型数据库。以下是JDBC规范中的几个核心编程对象:
DriverManager:它是JDBC的入口点,负责加载JDBC驱动并建立与数据库的连接。应用程序通过调用
DriverManager.getConnection()
方法来获取一个Connection
对象。Connection:表示到数据库的一个连接。它是线程不安全的,因此每次数据库操作都需要使用一个新的
Connection
对象。Connection
对象提供了执行SQL语句、管理事务等方法。Statement:用于执行简单的SQL语句。它包括三种类型:
Statement
:用于执行基本的SQL语句。PreparedStatement
:用于执行预编译的SQL语句,可以提高性能,防止SQL注入攻击。CallableStatement
:用于执行存储过程或函数。
ResultSet:表示从数据库查询返回的结果集。它提供了一种在应用程序中遍历、检索数据的方法。
ResultSet
是游标的一种实现,支持向前移动、定位、更新等功能。DatabaseMetaData:提供有关数据库的信息,如表、列、键、索引等元数据。可以通过
Connection.getMetaData()
方法获取。SQLException:所有JDBC异常都继承自
SQLException
。当JDBC操作失败时,会抛出此类或其子类的实例。Driver:JDBC驱动是一个实现了
java.sql.Driver
接口的类,负责处理与特定数据库的通信。DriverManager
会加载这些驱动,并使用它们来创建Connection
对象。Savepoint:表示一个事务中的保存点,允许在该点回滚事务,而不必回滚整个事务。
RowSet:
javax.sql.RowSet
接口提供了一个独立于连接的、可更新的ResultSet。它可以在断开与数据库的连接后继续操作结果集。
通过这些核心对象,JDBC为Java开发者提供了一套标准的API,用于执行各种数据库操作,如查询、更新、插入、删除等。
案例:
- 集成RSocket
- 集成WebSocket
- 使用ElasticSearch
- 使用Kafka
- 使用Mongodb
- 使用RabbitMQ
- SpringData对数据访问过程进行统一抽象
- Mybatis是什么及配置方法
- 集成RedisTemplate实现缓存操作
- [JdbcTemplate源码解析](https://t.zsxq.com/dLT4s 访问关系型数据库)
- 使用SpringDataJPA访问关系型数据库
- 集成Cassandra
- Cassandra的数据读取流程
- Cassandra的数据副本策略
- Cassandra的数据模型与使用方法
- Cassandra的数据删除机制
- Cassandra的数据写入流程
- Cassandra的原理
- Cassandra中的Gossip协议
- Cassandra中虚拟节点设计
5、安全层
案例:
- Spring安全体系的整体架构
- SpringSecurity中的过滤器链
- SpringSecurity中的核心类
- 基于SpringSecurity构建用户认证体系
- 基于SpringSecurity确保请求安全访问
- 使用SpringSecurity实现基于表单的认证和授权
- actuator
自定义健康状态指示器、使用Actuator将日志量调大 、自定义度量指标、自定义 Actuator 端点
- 使用AdminServer管理Spring应用程序:https://t.zsxq.com/OFTwk
管理Spring应用程序、使用AdminServer监控系统
6、消息队列
案例:
7、DevOps
云原生是一种构建和运行应用程序的方法论,旨在利用云计算的弹性、可扩展性和服务导向特性。
以下是Spring Boot如何支持云原生的一些关键点:
- 微服务架构:Spring Boot天然地支持微服务架构,这与云原生理念中的服务化、模块化和独立部署原则相吻合。Spring Cloud为基于Spring Boot的应用提供了构建微服务架构的一系列工具,包括服务发现、配置中心、熔断器、API网关等。
- 容器化:云原生强调使用容器技术(如Docker)来打包应用及其依赖,以便在任何环境中实现一致的运行环境。Spring Boot应用可以很容易地被打包成Docker镜像,便于在Kubernetes等容器编排平台上进行部署和管理。
- 弹性伸缩:云原生应用通常设计为可水平扩展,以应对负载变化。Spring Boot应用可以通过配置健康检查、自动重试、断路器等功能,提高系统的弹性和可用性。
- 持续集成/持续部署(CI/CD):云原生要求快速迭代和频繁部署,Spring Boot应用可以与Jenkins、GitLab CI等CI/CD工具无缝集成,实现自动化测试和部署。
- 可观测性:云原生应用需要具备良好的监控、日志和追踪能力,以便于故障排查和性能优化。Spring Boot通过集成Spring Actuator、Prometheus、ELK Stack等工具,提供了丰富的监控指标和日志输出。
- 无状态设计:为了更好地利用云资源,云原生应用往往设计为无状态或最小状态,这样可以更容易地实现水平扩展和故障恢复。Spring Boot应用可以通过数据库、缓存等外部存储服务来管理状态,保持自身轻量级。
案例:
日志级别、切换框架、文件输出、归档
8、Test
案例: