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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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);

}

}

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
15天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1313 5
|
2天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
14天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1356 87
|
2天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
4天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
194 82
2025年阿里云域名备案流程(新手图文详细流程)