首页 > 其他分享 >Spring Boot总结(1)

Spring Boot总结(1)

时间:2024-07-08 20:26:17浏览次数:20  
标签:总结 Spring 配置 Boot 自动 spring starter

一、Spring Boot访问数据库

1.Spring Boot JDBC访问数据库

对于数据访问层,无论是SQL还是NOSQL(非关系型数据库),Spring Boot都默认采用整合Spring Data的方式进行统一处理,通过大量自动配置,来简化我们对数据库访问层的操作,只需要进行简单的设置就可以实现对数据层的访问。
pom.xml中加入以下配置
引入JDBC启动器

<!--导入JDBC的启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

数据库驱动

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
     </dependency>

在resources中创建一个application.properties文件,加入以下代码
配置数据源

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver //根据自己的数据库版本进行修改
spring.datasource.url=jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC //根据自己的数据库名称进行修改
spring.datasource.username=root123 
spring.datasource.password=Root_123 //username和password根据自己的数据库进行修改

测试
Spring Boot 提供了一个名为JdbcTemplate的轻量级数据访问工具,它是对JDBC的封装。Spring Boot 对JdbcTemplate提供了默认自动配置,我们可以直接使用@Autowired或构造函数将它注入到bean中使用
创建一个Test测试类,进行测试

@SpringBootTest
class ApplicationTests {
    // 数据源组件
    @Autowired
    DataSource dataSource;

    // 用于访问数据库的组件
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Test
    void contextLoads() throws SQLException {
        System.out.println("默认数据源:" + dataSource.getClass());
        System.out.println("数据库连接实例:" + dataSource.getConnection());
        // 访问数据库
        Integer i = jdbcTemplate.queryForObject("SELECT count(*) FROM users", Integer.class);
        System.out.println("person 表中共有" + i + "条数据。");
    }
}

2.Spring Boot整合MyBatis

MyBatis是一个半自动化的ORM框架,所谓半自动化是指MyBatis只支持将数据库查出的数据映射到POJO实体类上,而实体到数据库的映射则需要我们自己编写SQL语句实现,相较于Hiberante这种完全自动化的框架,Mybatis更加灵活,我们可以根据自身的需求编写sql语句来实现复杂的数据库操作。

随着Spring Boot越来越流行,越来越多的被厂商及开发者所认可,MyBatis 也开发了一套基于 Spring Boot 模式的 starter:mybatis-spring-boot-starter。

pom.xml文件中加入以下依赖
引入依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

配置MyBatis
在application.propertites文件中加入以下配置:

server.port=8080
spring.profiles.active=dev
#映射文件所在位置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#别名
mybatis.type-aliases-package=com.by.bean
#配置日志级别 com.beiyou debug  输出sql信息
logging.level.com.beiyou=debug

二、Spring Boot 自动装载原理

Spring Boot 自动装载原理图

自动配置原理

Spring Boot 项目创建完成后,即使不进行任何的配置,也能够顺利地运行,这都要归功于 Spring Boot 的自动化配置。

Spring Boot 默认使用application.properties 或 application.yml作为其全局配置文件,我们可以在该配置文件中对各种自动配置属性(server.pont、logging.level.*等等)进行修改,并使之失效。

Spring Boot 官方文档:常见应用属性 中对所有的配置进行了列举和解释,我们可以根据官方文档对Sprin Boot进行配置,但Spring Boot 中的配置属性数量庞大,只需要了解Spring Boot自动配置原理,才能轻松的配置Spring Boot。

Spring Boot自动化配置也是基于Spring Fatories机制实现的,在spring-boot-autoconfigure-xxx.jar类路径下的META-INF/spring.factories中设置Spring Boot 自动配置的内容

步骤

  1. Spring Boot启动时加载主配置类,@EnableAutoConfiguration注解开启了自动配置功能
  2. @EnableAutoConfiguration的作用
    扫描所有jar包类路径下META-INF/spring.factories把扫描到的这些文件的内容包装成properties对象从properties中获取到EnableAutoConfiguration。class类对应的值,然后把他们添加在容器中。每一个这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中,用他们来做自动配置。
  3. 对每一个自动类进行自动配置功能
  4. 根据当前不同的条件判断,决定这个配置类是否生效。一但这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的。
  5. 所有在配置文件中能配置的属性都是在xxxxProperties类中封装者,配置文件能配置什么就可以参照某个功能对应的这个属性类

总结

  • Spring Boot启动会加载大量的自动配置类
  • 先看需要的功能中有没有SprinBoot写好的自动配置类
  • 然后看这个自动配置类中配置了哪些组件
  • 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值
  • xxxxAutoConfigurartion:自动配置类;给容器中添加组件;
  • xxxxProperties:封装配置文件中相关属性;

Conditional条件注解

作用

必须是@Conditional指定的条件成立,才给容器中添加组件,配置里面的所有内容才生效。其最终实现的效果或者语义类似于如下伪代码:

if(符合 @Conditional 规定的条件){
    加载当前配置(enable current Configuration)或者注册当前bean定义;
}

要实现基于条件的配置,我们只要通过 @Conditional 指定自己的 Condition 实现类就可以了(可以应用于类型 Type 的标注或者方法 Method 的标注)
@Conditional 可以作为一个 Meta Annotation 用来标注其他 Annotation 实现类,从而构建各色的复合 Annotation,比如 SpringBoot 的 autoconfigure 模块就基于这一优良的革命传统,实现了一批 Annotation(位于 org.springframework.boot.autoconfigure.condition 包下),条件注解如下:

注解作用
@ConditionalOnBean当容器里有指定的 Bean 的条件下。
@ConditionalOnClass当类路径下有指定的类的条件下。
@ConditionalOnExpression基于 SpEL 表达式作为判断条件。
@ConditionalOnJava基于 JVM 版本作为判断条件
@ConditionalOnJndi在 JNDI 存在的条件下查找指定的位置。
@ConditionalOnMissingBean当容器里没有指定 Bean 的情况下。
@ConditionalOnMissingClass当类路径下没有指定的类的条件下。
@ConditionalOnNotWebApplication当前项目不是 Web 项目的条件下。
@ConditionalOnProperty指定的属性是否有指定的值。
@ConditionalOnResource路径下是否存在指定资源文件
@ConditionalOnSingleCandidate当指定 Bean 在容器中只有一个,或者虽然有多个但是指定首选的 Bean。
@ConditionalOnWebApplication当前项目是 Web 项目的条件下。

有了这些复合 Annotation 的配合,我们就可以结合 @EnableAutoConfigurationn 实现基于条件的自动配置了。SpringBoot 能够风靡,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块,而这些依赖模块都是基于以上 @Conditional 复合 Annotation 实现的,这也意味着所有的这些依赖模块都是按需加载的,只有符合某些特定条件,这些依赖模块才会生效,这也就是我们所谓的“智能”自动配置

自动配置的顺序

三大注解

注解作用
@AutoConfigureBefore让当前配置或者组件在某个其他组件之前
@AutoConfigureAfter让当前配置或者组件在某个其他组件之后
@AutoConfigureOrder指定外部依赖的 AutoConfig 的加载顺序(即定义在/META-INF/spring.factories文件中的配置 bean 优先级),值越小优先级越高

三、手写starter

spring-boot-stater模块

1.介绍

SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。

优点

一般认为,SpringBoot 微框架从两个主要层面影响 Spring 社区的开发者们:

  • 基于 Spring 框架的“约定优先于配置(COC)”理念以及最佳实践之路。
  • 提供了针对日常企业应用研发各种场景的 spring-boot-starter 自动配置依赖模块,如此多“开箱即用”的依赖模块,使得开发各种场景的 Spring 应用更加快速和高效。

标签:总结,Spring,配置,Boot,自动,spring,starter
From: https://blog.csdn.net/qq_53098873/article/details/140223573

相关文章

  • 7.8日BOOTLOAD总结(3)
    今天突破性进展,成功实现了SC92系列的单区远程升级功能,之前厂家给的DEMO程序存在一些问题,或者说是KEIL5软件的问题,导致FLASH分区内的程序烧写出现了问题。问题描述:用工具将BOOT和APP程序合并后,FLASH分区的01H-600H为BOOT程序,600H以后为APP程序,等同于先烧录APP程序,再烧录BOOT程序。......
  • JavaScript总结2
    概述JavaScript是世界上最流行的脚本语言。JavaScript是一种轻量级的编程语言,可以插入HTML页面的编程代码。JavaScript插入HTML页面后,可由浏览器执行。特点语法简单,易学易用;解释性语言;跨平台,基于对象和事件驱动,可用于客户端。作用可以动态改变网页内容,网页外观;验证表......
  • 蓝桥杯单片机学习总结(Day1 实现LED闪烁)
    标题一:通过SM74HC138译码器打开控制8个LED灯的寄存器标题二:编程思路标题三:总结 打开LED寄存器: 由开发板的原理图可知其8个LED灯的寄存器开关为SM74HC138译码器(以下用38译码器称代)的Y4口,该38译码器的输入端P25~P27,其分别对应P25->SM74HC138_A、P26->SM74HC138_B、P27->S......
  • Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树
    第31天,贪心最后一节(ง•_•)ง......
  • SpringCloud学习
    认识微服务1.单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署优点:架构简单部署成本低缺点:耦合度高2.分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务优点:降低服务耦合度有利于服务升级拓展缺点:配置环境增多考虑问题:服务......
  • 在Spring Boot项目中集成分布式追踪系统
    在SpringBoot项目中集成分布式追踪系统大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在复杂的分布式系统中,定位和解决问题是一项挑战。分布式追踪系统通过跟踪请求的调用链,帮助开发者分析和优化系统性能,确保各个服务之间的协调与合作。本文将探讨如何......
  • 深入理解Spring Boot中的异常处理机制
    深入理解SpringBoot中的异常处理机制大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在任何应用程序开发中,异常处理都是至关重要的一部分。SpringBoot作为一个现代化的Java开发框架,提供了强大而灵活的异常处理机制,使开发者能够优雅地处理各种异常情况,保......
  • 解析Spring Cloud中的配置中心实现
    解析SpringCloud中的配置中心实现大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.SpringCloud配置中心简介SpringCloud为构建分布式系统中的微服务架构提供了丰富的解决方案,其中配置中心在微服务架构中扮演着关键角色。本文将深入探讨如何利用Spri......
  • SpringMVC-03-RestFul和Controller
    1、ControllerMVC架构中的控制层,在SpringMVC中,由Handler组成负责提供访问应用程序的行为:处理用户的请求并调用Model层将其转换为一个模型数据跳向View层在SpringMVC中,对于Controller的配置方式有很多种,通常可以通过接口定义或注解定义两种方法实现新建一个子项目,Sprin......
  • 在Spring Boot中集成单元测试框架
    在SpringBoot中集成单元测试框架大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.单元测试概述在软件开发中,单元测试是保证代码质量和功能正确性的重要手段。SpringBoot框架支持多种单元测试框架,如JUnit和Mockito,通过这些框架,开发者可以编写自动化的......