SpringBoot | 3.1 配置数据源

前言

前面介绍了SpringBoot的自动配置原理,用一句话概括是:启动时加载所有,最终按照条件进行装配。本章节表面上是讲数据访问,但其核心还是讲SpringBoot的自动配置,只不过自动配置的对象是数据库相关的依赖(如:druid、MyBatis、MyBatis-Plugs等)。这些依赖的导入与装配都是SpringBoot帮我们自动完成的。

SpringBoot默认使用的数据源是Hikari(下面有源码分析),以后我们将使用阿里的Druid数据源进行数据库相关配置与操作。

在本篇,我们可以知道:

  • 数据源的自动配置原理(2.);
  • SpringBoot整合第三方技术的两种方式(3.);
  • SpringBoot在处理自动配置时的逻辑(3.2.2);
  • Druid数据源自动配置原理(3.2.2);

可以直接跳转至第四点总结那查看源码结构图。


1. 数据源的自动配置

我们先基于SpringBoot默认的HikariDataSource数据源,导入JDBC场景,看看SpringBoot帮我们自动配置了什么。

首先导入JDBC场景依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

导入JDBC场景依赖后,我们可以在Maven的Dependencies依赖里看出spring-boot-starter-data-jdbc自动帮我们引入了数据源、JDBC与事务相关jar包。

JDBC场景

少了数据库连接驱动依赖

我们可以发现,这其中没有数据库连接驱动依赖,道理很简单,SpringBoot并不知道我们要使用什么数据库(MySQL还是Oracle或其他)。

直接在pom.xml文件里添加数据库驱动依赖即可

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

我们不用关注数据库驱动的版本,在SpringBoot里使用版本仲裁自动匹配( 数据库版本和驱动版本对应 ),当然,我们也可以自定义版本。

自定义连接驱动版本:

  1. pom.xmldependency直接依赖引入具体版本(maven的就近依赖原则)

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>
    
  2. pom.xmlproperties重新声明版本(maven属性的就近优先原则)

    <properties>
        <java.version>1.8</java.version>
        <mysql.version>5.1.49</mysql.version>
    </properties>
    


2. *数据源自动配置源码分析

基于上面的例子,我们来剖析SpringBoot数据源的自动装配原理。

由于数据源的配置是SpringBoot帮我们自动配置的,因此我们在外部依赖库里找到jdbc相关的自动配置:


在这里插入图片描述

往下翻翻找到jdbc的包:

在这里插入图片描述

可以看到引入jdbc相关依赖后SpringBoot帮我们引入了很多自动配置类,如:

  • DataSourceAutoConfiguration:数据源的自动配置类;

  • DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置;

  • JdbcTemplateAutoConfiguration:JdbcTemplate的自动配置,可以来对数据库进行crud(JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用);

  • JndiDataSourceAutoConfiguration:jndi的自动配置;

  • XADataSourceAutoConfiguration:分布式事务相关的自动配置;

  • 等......

我们对其中两个进行分析:

2.1 DataSourceAutoConfiguration:数据源自动配置类

解释了SpringBoot底层的数据源是Hikari;

其中DataSourceAutoConfiguration是数据源的自动配置类,我们点进去看源码,发现其定义了一些静态方法,其中底层数据源相关的是:

@Configuration(proxyBeanMethods = false)
@Conditional({DataSourceAutoConfiguration.PooledDataSourceCondition.class})
@ConditionalOnMissingBean({DataSource.class, XADataSource.class})
@Import(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值