苏州网站优化,三网站建设,推广思路,30天网站建设实录教程文章目录 Spring Boot - 01一、概述二、第一个 Spring Boot 程序补充知识 三、配置文件1. yaml 配置文件2. 使用 yaml 配置文件给属性赋值3. 松散绑定以及数据校验4. 配置文件的位置以及多环境配置 四、Spring Boot 分析1. pom.xml2. 启动器3. 主程序4. 自动装配原理5. 主启动类… 文章目录 Spring Boot - 01一、概述二、第一个 Spring Boot 程序补充知识 三、配置文件1. yaml 配置文件2. 使用 yaml 配置文件给属性赋值3. 松散绑定以及数据校验4. 配置文件的位置以及多环境配置 四、Spring Boot 分析1. pom.xml2. 启动器3. 主程序4. 自动装配原理5. 主启动类运行 注意 Spring Boot - 01
Spring Boot 官网点此进入 一、概述 Spring Boot 核心思想约定大于配置 Spring Boot 的主要优点 为所有 Spring 开发者更快地入门开箱即用提供各种默认配置来简化项目配置内嵌式容器简化 Web 项目没有冗余代码生成和 XML 配置的要求。 单体应用架构all in one 是指一个应用中的所有功能单元都封装在一个应用中例如将数据库访问、Web 访问等各个功能都放到一个 war 包内优点易于开发和测试方便部署当需要扩展时将 war 包复制多份然后放在多个服务器上再做个负载均衡即可缺点如果要修改某处必须停掉整个服务重新打包部署并且对于大型应用不可能把所有内容都放在一个应用中。 微服务架构 把每个功能元素独立出来然后将独立的功能元素动态组合微服务架构是对功能元素进行复制而没有对整个应用进行复制优点节省了调用资源并且每个功能元素都是一个可替换的、可独立升级的软件代码高内聚低耦合。 微服务的具体阐述中文翻译点此进入微服务架构中各个功能元素完成自己的功能然后通过 http 相互请求调用。例如一个电商系统中查缓存、连接数据库、结账、支付等服务都是一个个独立的功能元素它们作为一个个微服务共同构建了一个庞大的系统如果要修改其中的一个功能只需要升级其中一个功能服务单元即可Spring 为构建实现微服务提供了从构建应用单元到完成大型分布式应用的方案 使用 Spring Boot 可以构建一个个功能独立的微服务应用单元使用 Spring Cloud 可以实现分布式完成大型分布式网络服务的调用使用 Spring Cloud Data Flow 可以在分布式中间进行流式数据计算、批处理等。 二、第一个 Spring Boot 程序
步骤 运行报错的情况 如果运行报错类文件具有错误的版本 61.0应为 52.0此时需要在 pom.xml 中降低 Spring Boot 的版本这里降为 2.7.12 如果运行报错java 无效的目标发行版17此时需要修改两个地方如图所示 打开 Settings 设置修改 Java 编译器的版本为 1.8打开项目结构修改 Sources 和 Dependencies 为 1.8。 运行成功并添加 controller 文件夹 说明 程序主入口所在的类由注解 SpringBootApplication 声明查看源码发现该类是 Spring 的一个组件Componentcontroller 包一定要与程序主入口所在的类在同级目录Spring Boot 使用 Tomcat 作为默认嵌入式容器通过查看 pom.xml 文件可以看到有一个父项目spring-boot-starter-parent所有的 Spring Boot 依赖都是以 spring-boot-starter 开头的 spring-boot-starter-web 依赖包含了 SpringMVC用于实现 http 接口spring-boot-starter-test 依赖用于编写单元测试。 补充知识
修改端口号可以在 Spring Boot 的核心配置文件 application.properties 中配置
# 修改端口号
server.port8081自定义启动 Banner在线生成工具点此进入在 resources 包下新建 banner.txt将 Banner 粘贴到文件中。 三、配置文件
Spring Boot 使用一个全局的配置文件配置文件名称是固定的为application而文件类型可以为 properties 或 yaml。
配置文件的作用修改 Spring Boot 自动配置的默认值。
1. yaml 配置文件
yaml 是一个可读性高用来表达数据序列化的格式。
yaml 语法结构key : (空格) value注意一定要有空格
# 普通的键值对
name: Sun3285# 对象
student: name: Sun3285age: 24student1: {name: Sun3285, age: 24} # 行内写法# 数组
teacher: - 小张- 小明teacher1: [小张, 小明] # 行内写法注意 字符串不一定要用双引号标识在缩排中空白字符的数目并不是非常重要只要相同阶层的元素左侧对齐就可以注意不能使用 Tab 字符允许选择性加入空行以增加可读性在 yaml 中可以使用缩写语法行内写法 数组一组按次序排列的值用 [] 包括起来对象键值对的集合用 {} 包括起来。 2. 使用 yaml 配置文件给属性赋值 之前在 Spring 的 xml 配置文件中注册 bean然后通过依赖注入给属性赋值 现在在类上加注解注册为 bean简单属性可以使用注解 Value 实现自动装配复杂类型的属性可以使用 yaml 配置文件赋值。
实践在程序主入口所在类的同级目录中新建 pojo 包建立 Dog 类和 Person 类。 使用 yaml 配置文件给属性赋值并在 Java 类上使用注解 ConfigurationProperties(prefix xxx) 声明 测试及结果 注意点 键的名称不要有中文 在给对象属性赋值时如果既使用了注解 Autowired 自动装配又使用了 yaml 配置文件赋值最终会以 yaml 配置文件赋值 使用注解 ConfigurationProperties 的前提这个类被注册成为容器中的组件 在使用注解 ConfigurationProperties 时会有以下提示。解决办法在 pom.xml 中添加以下依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional
/dependency测试发现布尔类型的属性赋值为 null 原因在自动生成 set 方法时方法名为 setHappy 而 yaml 配置文件中键名为 isHappy 两者不一致改正方法修改 set 方法的方法名为 setIsHappy 或修改 yaml 配置文件中键名为 happy 使两者一致可以发现使用 yaml 配置文件给属性赋值的本质也是根据 set 方法来实现依赖注入。 3. 松散绑定以及数据校验
松散绑定yaml 配置文件中的键名可以有下划线或中划线。 JSR303 数据校验在字段增加一层过滤器验证可以保证数据的合法性。
实现方式
在类上加注解 Validated 声明在 pom.xml 中导入 spring-boot-starter-validation 依赖根据需要在属性上加对应注解声明进行数据验证。
!-- spring-boot-starter-validation --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactIdversion3.0.1/version
/dependency以验证邮箱格式为例 4. 配置文件的位置以及多环境配置
配置文件可以放置的位置以及优先级在官网上有详细说明点此进入。 可以根据开发、测试等不同场景配置多个环境并选择激活使用哪一个配置文件。 四、Spring Boot 分析
1. pom.xml
核心依赖在父工程 spring-boot-dependencies 中在引入 Spring Boot 依赖时不需要指定版本因为在父工程中已经指定了版本。
2. 启动器
启动器就是 Spring Boot 的启动场景Spring Boot 会把所有的功能场景变成一个个的启动器例如 spring-boot-starter-web 会自动导入 Web 环境所用到的所有依赖我们要使用什么功能只需要导入对应的启动器即可官网点此进入。 3. 主程序 接下来将对主程序中的注解自动装配原理和 main 方法主启动类运行进行分析。
4. 自动装配原理 SpringBootConfiguration 声明是 Spring Boot 的配置文件同时也是 Spring 的一个组件ComponentScan 扫描当前主启动类同级的包EnableAutoConfiguration 自动导入包将自动配置的类导入容器使自动配置生效 AutoConfigurationPackage 导入类 Registrar 自动注册包 导入类 AutoConfigurationImportSelector 自动导入选择器是自动导入包的核心 getCandidateConfigurations 方法 获取候选的配置 configurations 调用 SpringFactoriesLoader 类中的 loadFactoryNames 方法 获取所有主启动类的加载配置 loadFactoryNames 方法中调用本类中的 loadSpringFactories 方法 获取自动配置类遍历封装。 过程
Spring Boot 在启动时从类路径 spring-boot-autoconfigure-2.7.12.jar/META-INF/spring.factories 下获取指定的值在 spring.factories 中所有的组件以类名的方式返回将这些自动配置的类导入容器自动配置就会生效有些自动配置类会被注解 ConditionalOnxxx 声明表示如果条件都满足该自动配置类才会生效之前我们需要手动配置的东西现在 Spring Boot 帮我们做了用自动配置类代替了手动配置。
总结Spring Boot 所有的自动配置类都是在启动的时候扫描并加载到容器中所有的自动配置类都在 spring.factories 中但是不一定生效要判断自动配置类被注解 ConditionalOnxxx 声明的条件是否满足是否导入了对应的启动器 starter有了启动器自动装配就会生效。 补充 1 注解 Conditional 的扩展注解有 ConditionalOnJava、ConditionalOnClass、ConditionalOnProperty 等等这些扩展注解的作用为判断是否满足当前指定条件如果满足该自动配置类才会生效。 补充 2配置文件的作用是修改 Spring Boot 自动配置的默认值那么怎么知道配置文件中有哪些默认值呢 方式一官网点此进入 方式二【推荐】 第一在 spring.factories 中可以找到所有的自动配置类或者在 org 包中可以找到所有的类第二找到自动配置类 xxxAutoConfiguration.java 找到注解 xxxProperties 中的配置属性类第三这些配置属性类由注解 ConfigurationProperties 声明绑定了配置文件就可以在 yaml 配置文件中配置修改这些属性值。 补充 3在 yaml 配置文件中可以通过 debug: true 来看自动配置类哪些生效哪些没有生效 Positive matches 正匹配自动配置类生效Negative matches 负匹配自动配置类没有生效Unconditional classes 没有条件的类。 补充 4导入了自动配置类为什么还要导入启动器 答有些自动配置类会被注解 ConditionalOnxxx 声明表示如果条件都满足该自动配置类才会生效此时就需要导入启动器满足所需条件。 5. 主启动类运行
main 方法
public static void main(String[] args) {SpringApplication.run(Springboot01Application.class, args);
}说明run 方法中第一个参数为应用入口的类第二个参数为命令行参数。 SpringApplication 类主要做了以下四个事情
推断应用的类型是普通项目还是 Web 项目查找并加载所有可用初始化器设置到 initializers 属性中找出所有的应用程序监听器设置到 listeners 属性中推断并设置 main 方法的定义类找到运行的主类。 注意
有目标持续学习不断进步Spring Boot 官网https://spring.io/projects/spring-boot#overview微服务的具体阐述中文翻译链接https://www.cnblogs.com/liuning8023/p/4493156.htmlSpring Boot 自定义启动 Banner 在线生成工具https://www.bootschool.net/ascii