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

如何在spring框架中解决多数据源的问题(2)

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

我来回答

1个回答

热心网友 时间:2022-05-04 02:17

最后修改MultiDataSource的方法getDataSource():java 代码public DataSource getDataSource(){
String sp = SpObserver.getSp();
return getDataSource(sp);}完整的MultiDataSource代码在附件中。
(五) 动态添加数据源
通过以上方案,我们解决了动态分配数据源的问题,但你可能提出疑问:方案中的数据源都是配置在spring的ApplicationContext中,如果我在程序运行过程中动态添加数据源怎么办?这确实是一个问题,而且在我们的项目中也确实遇到。spring的ApplicationContext是在项目启动的时候加载的。加载以后,我们如何动态地加载新的bean到ApplicationContext中呢?我想到如果用spring自己的方法解决这个问题就好了。所幸的是,在查看spring的源代码后,我找到了这样的代码,编写了DynamicLoadBean类,只要调用loadBean()方法,就可以将某个或某几个配置文件中的bean加载到ApplicationContext中(见附件)。不通过配置文件直接加载对象,在spring的源码中也有,感兴趣的朋友可以自己研究。
(六) 在spring中配置
在完成了所有这些设计以后,我最后再唠叨一句。我们应当在spring中做如下配置:xml 代码<bean id="dynamicLoadBean" class="com.htxx.service..DynamicLoadBean"bean
<bean id="dataSource" class="com.htxx.service..MultiDataSource"
<property name="dataSource"
<ref bean="dataSource1" /propertybean
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
<property name="dataSource"
<ref bean="dataSource" /property
......bean其中dataSource属性实际上更准确地说应当是defaultDataSource,即spring启动时以及在客户没有指定数据源时应当指定的默认数据源。
该方案的优势
首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。唯一不同的是在真正的dataSource与sessionFactory之间增加了一个MultiDataSource。
其次,实现简单,易于维护。这个方案虽然我说了这么多东西,其实都是分析,真正需要我们写的代码就只有MultiDataSource、SpObserver两个类。MultiDataSource类真正要写的只有getDataSource()和getDataSource(sp)两个方法,而SpObserver类更简单了。实现越简单,出错的可能就越小,维护性就越高。
最后,这个方案可以使单数据源与多数据源兼容。这个方案完全不影响BUS和DAO的编写。如果我们的项目在开始之初是单数据源的情况下开发,随着项目的进行,需要变更为多数据源,则只需要修改spring配置,并少量修改MVC层以便在请求中写入需要的数据源名,变更就完成了。如果我们的项目希望改回单数据源,则只需要简单修改配置文件。这样,为我们的项目将增加更多的弹性。
如何在spring框架中解决多数据源的问题

我首先想到在spring的applicationContext中配置所有的dataSource。这些dataSource可能是各种不同类型的,比如不同的数据库:Oracle、SQL Server、MySQL等,也可能是不同的数据源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。然后sessi...

spring使用Hibernate配置双数据源事务问题怎么解决

第一步、测试能否配置多个DataSource 第二步、测试能否配置多个SessionFactory 第三步、测试能否配置多个TransactionManager 第四步、测试能否使用多个TransactionManager,也就是看能否配置多个 基本上到第四步就应该走不通了,因为Spring中似乎不能配置多个,而且@transactional注解也无法让用户选择具体使用哪个Tr...

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

在使用ibatis时,管理多个数据源曾是一项复杂任务,每次增加一个数据源就需要额外的sql-map-config配置文件,这无疑增加了维护的难度。然而,借助Spring框架,我们可以轻松地解决这个问题,其中Spring的AbstractRoutingDataSource是关键工具。AbstractRoutingDataSource是一个实现了javax.sql.DataSource接口的抽象类...

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

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

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

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

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

在Spring Boot中配置多数据源的步骤包括:首先,在pom.xml文件中引入Spring Boot Data JPA和MySQL的依赖。接下来,在application.properties或application.yml文件中配置两个数据源。创建两个数据源的配置类,使用@ConfigurationProperties注解将配置文件中的属性绑定到DataSource对象上。通过这种方式,你可以为...

Spring boot + druid + mybatis-plus 支持多数据源的系列问题说明

无需修改pom.xml文件,原架构引用即可。在application.properties配置中,修改数据库连接信息,以适应多个数据源。主启动类调整以排除自动启动。创建对应配置类,配置多数据源连接。改造后,服务支持多数据库连接。面临挑战:实体bean与数据库字段驼峰规则绑定失效。多数据源引入导致此规则不适用,需手动调整。...

Spring MVC配置多个数据源可能遇到的坑

在applicationContext.xml文件中对数据源进行配置:在applicationContext.xml文件中配置mybatisSqlSessionFactoryBean:在applicationContext.xml文件中配置SqlSessionTemplate:在applicationContext.xml文件中配置mybatis mapper接口,扫描所有dao:如果是按照以上的配置的,应该是可以成功的。org.apache.ibatis.binding....

Spring Boot 项目中配置多数据源@Transactional注解失效问题

当一个Spring Boot 项目在配置了多个数据源 , 在编写 Service层方法 的时候 , 直接在service方法的上添加的 @Transactional 直接实现事务管理的方式是失效的 .以最近接触到的一个持久层框架使用的是Jpa的项目为例 , 该项目通过硬编码(配置类)的方式 , 在项目中配置了两个不同的数据源 , 所以...

Spring+Mybatis多数据源切换

首先,修改jdbc.properties文件以配置多数据源信息。接着,在mybatis.xml文件中,适配数据源配置。创建DynamicDataSource类,继承自AbstractRoutingDataSource,实现动态数据源切换功能。随后,创建DynamicDataSourceHolder类,用于管理当前数据源。调用DynamicDataSourceHolder.setDbType()方法即可切换数据源。在使用...

spring配置多个数据源多事务 spring动态数据源默认数据 spring的数据源获取 spring配置jndi数据源 spring配置多数据源 spring多数据源事务管理 spring数据源 spring数据源切换 springboot注入数据源
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
驻马店锦润文化传媒怎么样 驻马店有安达康净水器代理? 夫妻用品正品 夫妻情趣用品如何用才好 请问我把主机里面的零件全买回来后,找人装大概好多钱?还有就是电脑系统... 笔记本电脑马上到了 新买的电脑回来要做什么 我是小白 听说还的分盘... 小白一个 想换新电脑 去电脑城找人配了一台 大家帮看看行不行 主玩... 大一学生男,想买台笔记本电脑不会下载游戏平时就弄弄文档,看看电影,因为... c#编程:我只读取excel文件的第一行,但由于文件很大,读取很缓慢,有没有... 请问为什么我用C#使用NPOI读取excel数据第一遍没有问题,第二遍就报... 如何在一个Spring工程下使用多数据源配置的改进实现 Spring动态配置多数据源的介绍 cad已经画好的图怎么改比例? 安全可靠的手机图片恢复软件 Spring怎样高效的配置多套数据源 照片恢复软件会不会泄露隐私? Spring动态配置多数据源的简介 如何在spring配置多个数据源 私密照用手机照片恢复大师安全吗? spring 怎么实现注入多个数据源,并且可以同时使用这多个数据源 如何在spring框架中解决多数据源的问题 求日本恋爱动漫 谁知道毗湿奴是怎么来的吗?(我要详细的故事、要是有佛经举例就最好了) 拳皇200人人物包 恢复手机照片,哪个软件比较好用? mugen游戏下载 鲁格赛特被打败,究极生命体·塔尔塔罗斯登场,你怎么看? 大家快看拳皇最终BOOS不是大蛇!EVIL ASH(黑化阿修)绝对比大蛇强! 拳皇97大蛇出招表(详细)? mugen镜老(和针老是一伙的,相当与助手)的人物包,我急急急急!谁回答对了我追加! 用CAD画好图后怎样保存? spring如何生成带事务的多数据源 CAD画好实体图后如何在.. 多数据源 spring怎么管理事务的 CAD中画好了图怎么打印出来图很小呢? springboot整合多数据源 spring 最多可以配多少个数据源 cad画好的图怎样打印 CAD图画好后怎样分图层 软件测试中覆盖是什么意思 等价类划分的等价类划分的方法 多个等价类时覆盖一个无效等价类时其他有效等价类需要满足吗 等价类划分为什么要区分有效等价类和无效等价类 爱国者充电宝飞机上可以携带吗? 黑盒测试方法有哪些覆盖方法 出国坐飞机可以携带20000毫安的爱国者充电宝吗? 大神,求计算机三级软件测试技术的历年真题或复习资料 爱国者30000充电宝能带上飞机吗 等价类划分法的设计思想是什么 爱国者这款充电宝能带上飞机吗?