区分多数据源实现(一)|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习区分多数据源实现(一)

开发者学堂课程【SpringBoot 实战教程 区分多数据源实现(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/651/detail/10802


区分多数据源实现(一)


 1、通过包名区分多数据源数据库使用的是mysql数据库使用的数据库端框架是 mybatis需要把 mybatis 和 mysql 架包进行依赖放到工程中web 做好依赖

<!--springboot 集成 mybatis-->

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.1</version>

</dependency>

<dependency>

<groupId>mysql</groupId>

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

</dependency>

2、进行两个数据源的配置先看相对应的数据库其中一个是db1数据库操作里面的 users 表另外一个是 db5 数据库操作里面的 user 表两个数据库要配置两个数据源在全局配置文件中配置创建file命名为 application.properties两个数据源需要写两组左边属性的名字不一样在之前配置数据源的属性名中间增加了 db1,另外一个是 db5,如果用相同的名字springboot 无法区分相当于名字属于自定义的springboot 并不认识这些属性名

#SpringBoot 整合多数据源

针对于 db1数据库根据它生成 datasource 数据源对象需要取到值

spring.datasource.db1.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.db1.username=root

spring.datasource.db1.password=root

spring.datasource.db1.url=jdbc:mysql://localhost:3306/db1

spring.datasource.db5.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.db5.username=root

spring.datasource.db5.password=root

spring.datasource.db5.url=jdbc:mysql://localhost:3306/db5

3、为每个数据源进行相关配置创建一个包命名为 com.qianfeng.datasource

4、针对每一个数据库配置相应的信息创建一个 class命名为 DataSource1

根据里面的信息创建 DataSource创建 SqlSessionFactory创建事务管理器输入以下代码进行导入

@Configuration//注册到Spring容器中@MapperScan(basePackages="com.qianfeng.db1.mapper",sqlSessionFactoryRef="db1用来扫描 mapper不同的数据源操作的 mapper 不一样所以这里指明了对应的 mapper 所在的包也就是这个数据源要用com.qianfeng.db1.mapper 的 mapper同时指明了SessionFactory对象的引用

SqlSessionFactory")

publicclassDataSource1{

//privateDataSource1(){}

/**

*配置 db1数据库

*@return

*/

@Bean(name="db1Datasource") 这个对象用这个名字注入到容器中

@ConfigurationProperties(prefix="spring.datasource.db1")指定前缀根据以 db1开头的信息生成数据源对象

PublicDataSourcetestDatasource(){生成数据源 DataSource 对象

ReturnDataSourceBuilder.create().build();

}

/**

*创建 SqlSessionFactory需要依赖数据源

*@paramdataSource

*@return

*@throwsException

*/

@Bean(name="db1SqlSessionFactory")

@Primary

publicSqlSessionFactorytestSqlSessionFactory(@Qualifier("db1Datasource")DataSourcedataSource)

throwsException{

SqlSessionFactoryBeanbean=newSqlSessionFactoryBean();

通过FactoryBean创建 SqlSessionFactory

bean.setDataSource(dataSource);

Returnbean.getObject();最终返回 SqlSessionFactory 对象

}

/**

*配置事务管理

*@paramdataSource

*@return

*/

@Bean(name="db1TransactionManager")最终创建事务管理器对象的引用通过 bean 注入到容器中

PublicDataSourceTransactionManagertestTransactionManager(

@Qualifier("db1Datasource")DataSourcedataSource){依赖数据源事务来自 connection,connection就在数据源中

ReturnnewDataSourceTransactionManager(dataSource);

}

@Bean(name="db1SqlSessionTemplate")这是对象的引用把它注入到容器中

Public SqlSessionTemplate 线程安全对象可以实现数据库操作

testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory")db1SqlSessionFactory获取 SqlSessionTemplate对象

SqlSessionFactory sqlSessionFactory){ 封装数据库操作

Return new SqlSessionTemplate(sqlSessionFactory);

}

}

@Configuration@MapperScan(basePackages="com.qianfeng.db5.mapper",sqlSessionFactoryRef="db5

SqlSessionFactory")

publicclassDataSource2{

/**

这些都是和数据源相关的配置所以在 class 上加入注解 Configuration注册到 spring 容器中

5、按照这个道理为另外一个数据源创建 class命名为 DataSource2

@Configuration

@MapperScan (basePackages="com. qianfeng. db5. mapper" , sqlSessionFactoryRef="db5SqlSessionFactoryMapperScan扫描对应 mapper 的包要创建 mapper 时包名要和这个一致后面对应的是 sqlSessionFactory 的引用

public class DataSource2{

*配置db5数据库

*@return

*/

@Bean(name="db5Datasource")

@ConfigurationProperties(prefix="spring.datasource.db5")

PublicDataSourcetestDatasource(){

ReturnDataSourceBuilder.create().build();

}

/**

*创建SqlSessionFactory

*@paramdataSource

*@return

*@throwsException

*/

@Bean(name="db5SqlSessionFactory")

PublicSqlSessionFactorytestSqlSessionFactory(@Qualifier("db5Datasource")DataSourcedataSource)

throwsException{

SqlSessionFactoryBeanbean=newSqlSessionFactoryBean();

bean.setDataSource(dataSource);

//如果还有分页等其他事务//bean.setMapperLocations(newPathMatchingResourcePatternResolver().

//getResources("classpath:mybatis/test1/*.xml"));

returnbean.getObject();

}

/**

*配置事务管理

*@paramdataSource

*@return

*/

@Bean(name="db5TransactionManager")

PublicDataSourceTransactionManagertestTransactionManager(

@Qualifier("db5Datasource")DataSourcedataSource){

ReturnnewDataSourceTransactionManager(dataSource);

}

@Bean(name="db5SqlSessionTemplate")

publicSqlSessionTemplate

testSqlSessionTemplate(@Qualifier("db5SqlSessionFactory")

SqlSessionFactorysqlSessionFactory){

ReturnnewSqlSessionTemplate(sqlSessionFactory);

}

}

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10月前
|
前端开发
前端学习笔记202305学习笔记第二十五天-读写流组合使用
前端学习笔记202305学习笔记第二十五天-读写流组合使用
23 0
|
SQL Java Apache
区分多数据源实现(二)|学习笔记
快速学习区分多数据源实现(二)
93 0
区分多数据源实现(二)|学习笔记
|
SQL 存储 NoSQL
事务功能使用及原理介绍(一)|学习笔记
快速学习事务功能使用及原理介绍
270 0
事务功能使用及原理介绍(一)|学习笔记
|
存储 SQL NoSQL
事务功能使用及原理介绍(二)|学习笔记
快速学习事务功能使用及原理介绍
175 0
事务功能使用及原理介绍(二)|学习笔记
|
Java 数据库 开发者
区分多数据源分析|学习笔记
快速学习区分多数据源分析
107 0
|
SQL 监控 关系型数据库
ShardingSphere -读写分离(概念)| 学习笔记
快速学习ShardingSphere -读写分离(概念)。
174 0
ShardingSphere -读写分离(概念)|  学习笔记
|
SQL 运维 监控
ChangeStreams 使用及原理(一)|学习笔记
快速学习 ChangeStreams 使用及原理
370 0
ChangeStreams 使用及原理(一)|学习笔记
|
存储 缓存 监控
ChangeStreams 使用及原理(二)|学习笔记
快速学习 ChangeStreams 使用及原理
576 0
ChangeStreams 使用及原理(二)|学习笔记
|
存储 人工智能 算法
数字音频基础(下)| 学习笔记
快速学习数字音频基础(下),介绍了数字音频基础(下)系统机制, 以及在实际应用过程中如何使用。
338 0
数字音频基础(下)| 学习笔记
|
编解码 开发者
数字音频基础(上)| 学习笔记
快速学习数字音频基础(上),介绍了数字音频基础(上)系统机制, 以及在实际应用过程中如何使用。
243 0
数字音频基础(上)| 学习笔记

热门文章

最新文章