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

简介: 快速学习区分多数据源实现(一)

开发者学堂课程【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;
相关文章
|
3天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1077 151
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1747 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
690 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
657 12
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
422 4