如何在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()方法即可切换数据源。在使用...