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 | false) (proxyBeanMethods = |
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; |