1、创建项目(通过idea)

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_SpringBoot_02

这里的mysql就是帮助我们导入mysql驱动的。

然后通过项目下的pom.xml文件,可以发现我们导入了下面这些依赖。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_03

我们在使用最基本的jdbc的时候,我们只要引入jdbc和mhysql驱动就可以了。

2、与数据库连接

  启动数据库

我这里是通过phpstudy启动mysql数据库的。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据源_04

打开Navicat Premium,可以发现成功启用数据库。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_05

新建一个数据库

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_SpringBoot_06

编写配置文件

然后在resources下的新建一个application.yml文件进行编写相关的配置文件。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_07

测试

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_08

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据源_09

可以发现默认使用的是是tomcat的jdbc数据源

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_10

可以发现JDBC4Connection也能获取得到,没问题。


回到配置文件,我们按住ctrl键点username进去,如下图。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_11

然后进入DataSourceProperties.java文件。可以发现数据源的相关配置都是在这里配置的。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_bc_12

3、原理解析

那么为什么会是这样的效果?包括我们自动装配到数据源,而且springboot默认使用tomcat的jdbc的连接池作为数据源的。

那么我们可以探究一下有关数据源的自动配置原理。

我们打开自动配置包

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_13

我们可以发现jdbc下都是一些跟数据源有关的配置。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据源_14


然后我们拿几个比较重要的来讲解一下。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_15

这里的@Bean表示给容器中加组件。都是加一些DataSource。

这个类主要是给容器中加数据源的,但是加哪些数据源,就根据各种判断。

如果你导入了tomcat的jdbc连接池,并且你配置的spring.datasource.type是tomcat的jdbc这个数据源,如果你没配,也是认为你是配了的。 那么这种情况我们就导入tomcat的jdbc的数据源。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_16

如果你没有导入tomcatjdbc的数据源,那么根据其他条件进行导入其他的数据源等等。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_SpringBoot_17

可以通过下面这个方法进行自定义数据源

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据源_18

当然,还有一处比较好玩的配置。有一个DataSourceAutoConfiguration。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_19

这个DataSourceInitializer的作用是什么?我们点进去看看。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_bc_20

可以发现,其实它是一个ApplicationListener(这个监听器在Spring注解版里有讲过,可以在那参考一下原理..但是我没看过..以后有时间再上谷粒学院看看吧~~~)



通过注解我们可以知道这个DataSourceInitializer的作用

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_bc_21




第一个叫@PostConstruct比如说我们这个数据源刚创建好,我们把这个Initializer创建好对象以后它要调用init()方法,这个方法的作用就是从容器中拿到数据源,拿到数据源以后就runSchemaScripts();

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_22



还有一步叫onApplicationEvent,这就是我们的监听器,在我们监听到一个事件以后,它就会调用这个方法。 

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_23


通过程序创建表


springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_24



我们在跑建表语句的时候,我们首先要得到这个建表文件

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_25



而它获取呢,你可以指定这个文件的位置,它如果能够获取得到,它就OK了。如果不行就从类路径下找fallback

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_SpringBoot_26



而这个fallback呢,就是我们之前传的这个schema

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_27


也就是说呢,它来找下面的platform.sql或者.sql , 而这个platform默认就是all

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_28


springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_29


所以要运行这个schema文件就要改名,改成schema-all.sql 或者schema.sql

它呢,都是默认加载的。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_30



运行程序,成功建表。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_31

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据源_32



当然,如果我们不想改名,就用department.sql进行建表也可以。但是我们要修改配置文件。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_33


然后如果在有数据源的情况下,它还给我们容器中放一个JdbcTemplate 以及NameParameterJdbcTemplate(具名参数JdbcTemplate),方便我们操作数据库。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_SpringBoot_34


4、操作数据库

    写一个HelloController,进行数据查询。这里要注意的是,如果那个scema.sql不删除,那么我们重新启动这个程序的时候就会再运行一次schema.sql文件,原来中的数据就会消失。所以,当我们不用的时候就要删除schema.sql文件。


springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_35



我们在数据库中插入一个数据。

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_SpringBoot_36


成功返回JSON数据

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_37

小结


springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_38

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_数据库_39

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_bc_40

springboot 我如何获取数据库的值 springboot启动从数据库获取配置_sql_41