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

本文涉及的产品
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
相关文章
|
1月前
|
设计模式 虚拟化 开发者
利用SwiftUI构建动态列表的高级技巧
【4月更文挑战第14天】 在本文中,我们将深入探讨如何运用SwiftUI框架实现一个具有高度交互性和动态性的列表视图。我们将透过具体实例,展示如何结合SwiftUI的声明式语法与先进的设计模式,来优化列表的性能和用户体验。文中将涵盖数据绑定、动画过渡、以及状态管理的实用技巧,并讨论如何通过这些技术提升应用的响应性和可扩展性。
|
1月前
|
小程序 数据格式
【经验分享】如何实现自定义数据源的级联选择组件?
【经验分享】如何实现自定义数据源的级联选择组件?
56 6
|
自然语言处理 PyTorch 算法框架/工具
离线解耦的文本表征方法(持续更新ing...)
本文仅介绍离线、解耦的、直接对文本进行表征的方法。分成通过词嵌入池化得到句子嵌入,和直接进行句子嵌入两种做法。主要用PyTorch实现。 本文将使用一个数据集来撰写相应代码,并使用简单的线性分类器来实现multi-class文本分类,分类模型的代码(我每个都是跟前面的文本表征部分直接写在同一个脚本里的)和各表征方法的效果在第4节展示。 本文使用的分词方式是jieba默认模式。其他注意事项看具体各分节内容。
离线解耦的文本表征方法(持续更新ing...)
|
SQL Java Apache
区分多数据源实现(二)|学习笔记
快速学习区分多数据源实现(二)
93 0
区分多数据源实现(二)|学习笔记
|
SQL 存储 NoSQL
事务功能使用及原理介绍(一)|学习笔记
快速学习事务功能使用及原理介绍
270 0
事务功能使用及原理介绍(一)|学习笔记
|
存储 SQL NoSQL
事务功能使用及原理介绍(二)|学习笔记
快速学习事务功能使用及原理介绍
177 0
事务功能使用及原理介绍(二)|学习笔记
|
SQL 运维 监控
ChangeStreams 使用及原理(一)|学习笔记
快速学习 ChangeStreams 使用及原理
370 0
ChangeStreams 使用及原理(一)|学习笔记
|
存储 缓存 监控
ChangeStreams 使用及原理(二)|学习笔记
快速学习 ChangeStreams 使用及原理
580 0
ChangeStreams 使用及原理(二)|学习笔记
|
SQL 监控 关系型数据库
ShardingSphere -读写分离(概念)| 学习笔记
快速学习ShardingSphere -读写分离(概念)。
176 0
ShardingSphere -读写分离(概念)|  学习笔记
|
存储 开发者
数字音频基础(中)| 学习笔记
快速学习数字音频基础(中),介绍了数字音频基础(中)系统机制, 以及在实际应用过程中如何使用。
119 0
数字音频基础(中)| 学习笔记