Spring Boot配置数据源
 Spring Framework 为 SQL 数据库提供了广泛的支持。从直接使用 JdbcTemplate 进行 JDBC 访问到完全的对象关系映射(object relational mapping)技术,比如 Hibernate。Spring Data 提供了更多级别的功能,直接从接口创建的 Repository 实现,并使用了约定从方法名生成查询。
1、JDBC
1、创建项目,导入需要的依赖
1  | <dependency>  | 
2、配置数据源
1  | spring:  | 
3、测试类代码
1  | package com.oi;  | 
4、crud操作
 1、有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用连接和原生的 JDBC 语句来操作数据库
 2、即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即 org.springframework.jdbc.core.JdbcTemplate。
 3、数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
 4、Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用
 5、JdbcTemplate 的自动配置原理是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration 类
1  | package com.oi.contoller;  | 
2、自定义数据源DruidDataSource
通过源码查看DataSourceAutoConfiguration.java
1  | (proxyBeanMethods = false)  | 
1、添加druid的maven配置
1  | <dependency>  | 
2、添加数据源的配置
1  | spring:  | 
3、测试发现数据源已经更改
4、druid是数据库连接池,可以添加druid的独有配置
1  | spring:  | 
测试类,发现配置的参数没有生效
1  | package com.oi;  | 
需要定义druidDatasource的配置类,绑定参数
1  | package com.oi.config;  | 
Druid数据源还具有监控的功能,并提供了一个web界面方便用户进行查看。
加入log4j的日志依赖
1  | <!-- https://mvnrepository.com/artifact/log4j/log4j -->  | 
向DruidConfig中添加代码,配置druid监控管理台的servlet
1  | package com.oi.config;  | 
3、springboot配置多数据源并动态切换
 DataSource是和线程绑定的,动态数据源的配置主要是通过继承AbstractRoutingDataSource类实现的,实现在AbstractRoutingDataSource类中的 protected Object determineCurrentLookupKey()方法来获取数据源,所以我们需要先创建一个多线程线程数据隔离的类来存放DataSource,然后在determineCurrentLookupKey()方法中通过这个类获取当前线程的DataSource,在AbstractRoutingDataSource类中,DataSource是通过Key-value的方式保存的,我们可以通过ThreadLocal来保存Key,从而实现数据源的动态切换。
1、修改配置文件类
1  | spring:  | 
2、创建数据源枚举类
1  | package com.oi.mult;  | 
3、数据源切换处理
 创建一个数据源切换处理类,有对数据源变量的获取、设置和情况的方法,其中threadlocal用于保存某个线程共享变量。
1  | package com.oi.mult;  | 
4、继承AbstractRoutingDataSource
 动态切换数据源主要依靠AbstractRoutingDataSource。创建一个AbstractRoutingDataSource的子类,重写determineCurrentLookupKey方法,用于决定使用哪一个数据源。这里主要用到AbstractRoutingDataSource的两个属性defaultTargetDataSource和targetDataSources。defaultTargetDataSource默认目标数据源,targetDataSources(map类型)存放用来切换的数据源。
1  | package com.oi.mult;  | 
5、注入数据源
1  | package com.oi.mult;  | 
6、自定义多数据源切换注解
 设置拦截数据源的注解,可以设置在具体的类上,或者在具体的方法上
1  | package com.oi.mult;  | 
7、AOP拦截类的实现
 通过拦截上面的注解,在其执行之前处理设置当前执行SQL的数据源的信息,CONTEXT_HOLDER.set(dataSourceType)这里的数据源信息从我们设置的注解上面获取信息,如果没有设置就是用默认的数据源的信息。
1  | package com.oi.mult;  | 
8、使用切换数据源注解
1  | package com.oi.mult;  | 
9、在启动项目的过程中会发生循环依赖的问题,直接修改启动类即可
1  | package com.oi;  | 
4、springboot整合mybatis
1、导入mybatis的依赖
1  | <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->  | 
2、配置数据源
1  | spring:  | 
3、测试类
1  | package com.oi;  | 
4、创建实体类
1  | package com.oi.entity;  | 
5、配置Mapper接口类
1  | package com.oi.mapper;  | 
6、在resources下创建Emp.xml文件
1  | 
  | 
7、添加配置文件
1  | spring:  | 
8、编写controller
1  | package com.oi.contoller;  |