对于数据访问,无论是关系型数据库还是非关系型数据库,spring boot 默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。它通过引入各种***Template、***Respository来简化我们对数据访问层的操作,对我们来说只需要进行简单的设置即可。

要想使用这些功能,首先得导入场景启动器。只要是以data命名的starters,底层都是用的spring data来进行操作的。

springboot 数据源 config springboot加载数据源原理_mysql

整合基本的jdbc与数据源

用spring的初始化向导来新建一个工程:

springboot 数据源 config springboot加载数据源原理_数据源_02

选择我们所需要的场景:

springboot 数据源 config springboot加载数据源原理_spring boot_03

此时在pom文件中我们可以看到引入了如下内容:

springboot 数据源 config springboot加载数据源原理_java_04

如果要使用mysql,还应当导入如下内容:

springboot 数据源 config springboot加载数据源原理_数据源_05

最终形成的的依赖文件iml如下图所示:

springboot 数据源 config springboot加载数据源原理_spring boot_06

 在resources文件夹之下新建一个名为application.yml的文件,作为配置文件。在配置文件中,需要编写连接数据库所需的用户名、密码、url、驱动类名,如下图所示:

springboot 数据源 config springboot加载数据源原理_spring boot_07

 在测试类当中编写如下代码,将数据源进行注入。从容器中拿数据源,再从数据源中取一条连接。

springboot 数据源 config springboot加载数据源原理_spring boot_08

 效果默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源。数据源的相关配置都在DataSourceProperties里面。

数据源的自动配置原理

和数据源有关的配置都在这个包下:

org.springframework.boot.autoconfigure.jdbc

1、其中的DataSourceConfiguration,根据配置创建数据源,默认使用tomcat连接池。可以使用spring.datasource.type指定自定义的数据源类型。

2、SpringBoot默认可以支持以下数据源:

springboot 数据源 config springboot加载数据源原理_数据源_09

 也可以使用以下方式自定义数据源:

springboot 数据源 config springboot加载数据源原理_java_10

 使用Builder来创建数据源,其中有一个build()方法,通过BeanUtils进行反射创建出相应type的数据源,进而绑定相关的属性。

springboot 数据源 config springboot加载数据源原理_spring boot_11

3、还有一处配置:DataSourceAutoConfiguration,代表数据源的自动配置。

其中,给IOC容器中添加了一个DataSourceInitializer,是一个ApplicationListener监听器。

作用:1、runSchemaScripts():运行建表语句,

           2、runDataScripts():运行插入数据的sql语句。

springboot 数据源 config springboot加载数据源原理_spring boot_12

 默认只需要将文件命名为shema-*.sql、data-*.sql。这两种文件在Initializer当中运行。

springboot 数据源 config springboot加载数据源原理_mysql_13

springboot 数据源 config springboot加载数据源原理_java_14

 在运行建表语句时,首先要得到通过getScripts得到语句文件。从resources来获取路径,如果找不到,就去默认的fallback路径下寻找文件。

还可以在application.yml文件当中添加下面的内容来指定位置:

springboot 数据源 config springboot加载数据源原理_数据库_15

 操作数据库:自动配置了jdbcTemplate操作数据库。

示例:

1、编写一个控制器来发请求,在控制器当中注入jdbcTemplate来查询数据。

springboot 数据源 config springboot加载数据源原理_数据库_16

2、在数据库中插入测试数据。

springboot 数据源 config springboot加载数据源原理_spring boot_17

3、让程序处理query请求,让ResponseBody将数据写出去。

springboot 数据源 config springboot加载数据源原理_spring boot_18

 4、查看结果。

springboot 数据源 config springboot加载数据源原理_java_19