问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Spring动态配置多数据源的简介

发布网友 发布时间:2022-04-23 14:36

我来回答

1个回答

热心网友 时间:2022-04-07 23:55

Spring配置多数据源的方式和具体使用过程。
Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况:
一是,表级上的跨数据库。即,对于不同的数据库却有相同的表(表名和表结构完全相同)。
二是,非表级上的跨数据库。即,多个数据源不存在相同的表。
Spring2.x的版本中采用Proxy模式,就是我们在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑从Client中分离出来。Client提供选择所需的上下文(因为这是Client所知道的),由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。 具体的实现就是,虚拟的DataSource仅需继承AbstractRoutingDataSource实现determineCurrentLookupKey()在其中封装数据源的选择逻辑。
一、动态配置多数据源
1. 数据源的名称常量类:
package com.frogking.datasource;
public class DataSourceConst {
public static final String Admin=Admin;
public static final String User = User;
}
2. 建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称: package com.frogking.datasource;
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder =
new ThreadLocal(); // 线程本地环境
// 设置数据源类型
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
// 获取数据源类型
public static String getDataSourceType() {
return (String) contextHolder.get();
}
// 清除数据源类型
public static void clearDataSourceType () {
contextHolder.remove();
}
}
3. 建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey,该方法返回一个Object,一般是返回字符串: package com.frogking.datasource;
publicclass DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 在进行DAO操作前,通过上下文环境变量,获得数据源的类型
return DataSourceContextHolder. getDataSourceType();
}
}
4. 编写spring的配置文件配置多个数据源
<!-- 数据源相同的内容 -->
<bean class=org.springframework.jdbc.datasource.DriverManagerDataSource id=parentDataSource>
<property name=driverClassName>
<value>com.mysql.jdbc.Driver</value>
</property>
<property name=username>
<value>root</value>
</property>
<property name=password>
<value>1234</value>
</property>
</bean>
<!-- 以下配置各个数据源的特性 -->
<!-- 数据库test -->
<bean parent=parentDataSource id=adminDataSource>
<property name=url>
<value>jdbc:mysql://localhost:3306/test</value>
</property>
</bean>
<!-- 不同的数据库test2 -->
<bean parent=parentDataSource id=userDataSource>
<property name=url>
<value>jdbc:mysql://localhost:3306/test2</value>
</property>
</bean>
<!-- end 配置各个数据源的特性 -->
5. 编写spring配置文件配置多数据源映射关系
<bean class=com.frogking.datasource.DynamicDataSource id=dataSource>
<property name=targetDataSources>
<map key-type=java.lang.String>
<entry value-ref= adminDataSource key=Admin></entry>
<entry value-ref= userDataSource key=User></entry>
</map>
</property>
<property name=defaultTargetDataSource ref=adminDataSource >
</property>
</bean>
在这个配置中第一个property属性配置目标数据源,<map key-type=java.lang.String>中的key-type必须要和静态键值对照类DataSourceConst中的值的类型相 同;<entry key=User value-ref=userDataSource/>中key的值必须要和静态键值对照类中的值相同,如果有多个值,可以配置多个< entry>标签。第二个property属性配置默认的数据源。
6. 配置hibernate,和普通的hibernate、spring结合的配置一样:
<!-- sessionFactory的配置 -->
<BEAN class=org.springframework.orm.hibernate3.LocalSessionFactoryBean id=sessionFactory>
<property name=dataSource>
<REF local=dataSource> </REF>
</property>
<!-- 实体类资源映射 -->
<property name=mappingResources>
<LIST>
<VALUE>com/frogking/entity/User.hbm.xml </VALUE>
<VALUE>com/frogking/entity/Admin.hbm.xml</VALUE> </LIST>
</property>
<!-- 为sessionFactory 配置Hibernate属性 -->
<property name=hibernateProperties>
<PROPS>
<PROP key=hibernate.dialect> org.hibernate.dialect.MySQLDialect
</PROP>
<PROP key=hibernate.show_sql>true</PROP> <PROP key=hibernate.connection.autocommit>false</PROP> <PROP key=hibernate.cache.use_query_cache>false</PROP> <PROP key=hibernate.max_fetch_depth>2</PROP> <PROP key=hibernate.bytecode.use_reflection_optimizer>true</PROP>
</PROPS>
</property>
</BEAN>
<!-- 为配置sessionFactory -->
<BEAN class=com.frogking..LoginHibernateDao id=loginDao>
<property name=sessionFactory>
<REF local=sessionFactory> </REF>
</property>
</BEAN>

Spring动态配置多数据源基于spring和ibatis的多数据源切换方案_百度知 ...

AbstractRoutingDataSource是一个实现了javax.sql.DataSource接口的抽象类,它扮演了一个动态的数据源代理,能够在运行时根据上下文动态地选择使用哪个数据源。这样,数据源的配置依旧保留在Spring的配置文件中,而sessionFactory则无需知晓数据源的变化,只关注自身的dataSource属性。实现这个方案的关键是MultiDat...

springboot动态配置(springboot动态配置数据源)

SpringBoot整合MyBatisPlus配置动态数据源1、在SpringBoot中使用MybatisPlus分页需要注入Bean,并且在启动类上使用@MapperScan(com.simple.spring.boot.mapper)扫描mapper文件路径如下:使用MyBatisPlus可以为我们减少很多很多的代码,不过需要编写实体类,有失必有得。2、这里要排除DruidDataSourceAutoConfigure,...

SpringBoot实现动态数据源配置

为了实现多数据源并自动切换,我们需要了解SpringBoot自动配置的原理。在此之前,我们通常使用单数据源,而现在需要搞懂动态数据源,就必须先搞懂自动配置。现在,我们要实现多数据源,并能够自动切换。例如,查询A时连接行云数据库,查询B时连接OceanBase数据库。由于不能使用DataSourceAutoConfiguration,我们需...

【微服务】Spring Boot 多数据源配置与实现详解

1. 多数据源基础 在单一系统中运用多个独立数据源,是Spring Boot默认配置之外的扩展。在实际业务场景中,多数据源配置变得尤为重要。2. 应用场景 读写分离:减少对单个数据库的压力,提高读取性能。 数据库分片:处理大量数据,提升存储和查询效率。 多租户:每个租户独立使用自己的数据源,保...

springboot+mybatis是如何配置多数据源的?

配置多数据源在Spring Boot项目中,让应用同时连接和操作多个数据库,是现代企业级应用中的一项常见且关键需求。Spring Boot框架提供了一个高效且灵活的解决方案,帮助开发者轻松地配置和使用多个数据源。多数据源的概念及重要性在于,它允许应用根据不同的业务逻辑或负载均衡策略,选择使用不同的数据库。

spring服务中怎么实现mybatis多数据源动态切换?

Spring框架中的AbstractRoutingDataSource类是实现多数据源动态切换的关键。它作为数据源的封装,通过路由机制将数据库请求分发至不同的目标数据源,满足复杂业务需求、提升系统性能、增强灵活性。AbstractRoutingDataSource继承了DataSource接口,包含determineTargetDataSource方法,用于获取当前目标数据源标识符,并...

spring动态数据源使用的设计模式

spring动态数据源使用的设计模式有单例模式、工厂模式、代理模式、观察者模式、模板方法模式、装饰者模式、适配器模式、策略模式、桥接模式、访问者模式。1、单例模式 单例模式(Singleton Pattern):在Spring框架中,单例模式是最常见的设计模式之一。通过单例模式,Spring保证了每个Bean只有一个实例,可以...

springboot多数据源配置(springboot多数据源配置和切换苞米豆)_百度知...

springboot、mybatis-plus、Druid多数据源环境搭建 Java单体项目里,我们一般是只需配置一个数据库,这时代码里的dao层都是只对一个数据库操作;但有时候我们的数据可能在2个或者3个数据库,这时就需要配置更多数据源,进行数据库直连操作,下面以MySQL的两个库为例(Oracle也就换个驱动类与连接串)。 (本文阅读大概花费...

实用:Spring的多租户数据源管理 AbstractRoutingDataSource!

定义数据源配置,例如db-a和db-b。解析配置文件,并将其转换为properties格式。配置默认数据源,根据请求上下文中的标识动态切换数据源。设置项目中默认的数据源,并提供targetDataSource和defaultTargetDataSource的值,以确保其正常运行。然而,尽管AbstractRoutingDataSource提供了一种简便的数据源管理方式,但...

Spring Boot(十二):MyBatis-Plus的多数据源和分页

1、pom.xml配置 在pom.xml中增加MyBatis-Plus多数据源依赖:2、配置文件配置 在配置文件application.yml中配置我们需要连接的数据库:blog和user,默认为blog 3、启动类配置 在@SpringBootApplication注解上增加exclude = DruidDataSourceAutoConfigure.class配置:这个配置的作用是去掉对DruidDataSource...

spring动态数据源默认数据 动态图表的数据源是动态变化的 spring多数据源动态切换 spring动态创建数据源 spring动态数据源事务 websphere配置多个数据源 druid多数据源配置 jndi数据源配置 websphere配置数据源
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
推子半开是什么意思? 海运中的"半开门"是什么意思 分手后送给对方的话? 如果男对女没感情,为什么分手的时候却会抱着那个女孩痛哭呢?如果有感情... BUFFALO移动硬盘为什么贵 分手了我还有机会吗? 什么牌子移动硬盘好? 晚上吃蛋糕会胖吗 晚上喜欢吃蛋糕会发胖吗 吃 蛋糕能使人发胖吗? 观世音菩萨我今天来拜你要多长时间 如何在spring配置多个数据源 私密照用手机照片恢复大师安全吗? spring 怎么实现注入多个数据源,并且可以同时使用这多个数据源 如何在spring框架中解决多数据源的问题 求日本恋爱动漫 谁知道毗湿奴是怎么来的吗?(我要详细的故事、要是有佛经举例就最好了) 拳皇200人人物包 恢复手机照片,哪个软件比较好用? mugen游戏下载 鲁格赛特被打败,究极生命体·塔尔塔罗斯登场,你怎么看? 大家快看拳皇最终BOOS不是大蛇!EVIL ASH(黑化阿修)绝对比大蛇强! 拳皇97大蛇出招表(详细)? mugen镜老(和针老是一伙的,相当与助手)的人物包,我急急急急!谁回答对了我追加! 求拳皇mugen bt人物包 求拳皇神大蛇人物包 斋祀和大蛇谁历害 什么是盖亚意识?或者说大蛇意识, 谁有mugen大天使、麦田大蛇、宇宙意志的人物包?跪求,有分! 帽子的英文? 天赦罪大蛇,宇宙意志大蛇,mugen人物包。 照片恢复软件会不会泄露隐私? Spring怎样高效的配置多套数据源 安全可靠的手机图片恢复软件 cad已经画好的图怎么改比例? Spring动态配置多数据源的介绍 如何在一个Spring工程下使用多数据源配置的改进实现 如何在spring框架中解决多数据源的问题(2) 用CAD画好图后怎样保存? spring如何生成带事务的多数据源 CAD画好实体图后如何在.. 多数据源 spring怎么管理事务的 CAD中画好了图怎么打印出来图很小呢? springboot整合多数据源 spring 最多可以配多少个数据源 cad画好的图怎样打印 CAD图画好后怎样分图层 软件测试中覆盖是什么意思 等价类划分的等价类划分的方法 多个等价类时覆盖一个无效等价类时其他有效等价类需要满足吗 等价类划分为什么要区分有效等价类和无效等价类