用spring 的AbstractRoutingDataSource解决了这个问题。
原理如图:
项目采用的是hibernate,直接在spring.xml设置sessionFactory的dataSource属性为动态数据源即可。
因为项目所有数据库结构都一致,为了避免每次设置数据源的时候要改一堆参数,修改了spring AbstractRoutingDataSource类增加了一个getTargetDataSources方法,获取当前数据源详细信息,在其基础上修改数据库名称、用户名、密码即可,不用每次设置一堆参数。
Map<String, ComboPooledDataSource> targetDataSources = dynamicDataSource
.getTargetDataSources();
if (targetDataSources == null) {
targetDataSources = new HashMap<String, ComboPooledDataSource>();
targetDataSources.put("baseDataSource", baseDataSource);
}
targetDataSources.put(dataSourceName, subSystemDataSource);
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.afterPropertiesSet();
另外,设置AbstractRoutingDataSource参数后要调用afterPropertiesSet()方法,spring容器才会进行加载操作。
在动态设置数据源方面,可以通过两种方式实现:
- 在action(项目使用struts)中进行设置,可以确保在每个servlet线程中数据源是一致的。
- 以aop方式,对service方法进行拦截,根据需求设置不同数据源。
转载:http://javasight.net/2011/11/spring-based-dynamic-datasource-implementation/
分享到:
相关推荐
Spring提供了AbstractRoutingDataSource类,允许我们根据某种规则(如事务、请求上下文等)动态切换数据源。我们需要扩展这个类,并实现determineCurrentLookupKey方法来决定当前应该使用哪个数据源。 接着,描述中...
Spring的AbstractRoutingDataSource类可以用来实现动态数据源切换,它可以根据一定的规则(如事务上下文、请求参数等)选择使用哪个数据源。 Hibernate,是一个对象关系映射(ORM)框架,它允许开发者用面向对象的...
【Spring 动态数据源切换】使用 `AbstractRoutingDataSource` 的详细实现在处理多数据库环境时,Spring 提供了一个强大的工具 `AbstractRoutingDataSource`,它允许我们根据特定条件动态地切换数据源。本文将深入...
在Spring配置文件中,我们可以通过配置`AbstractRoutingDataSource`类来实现动态数据源切换。这个类可以根据一定的规则动态选择数据源。例如: ```xml <bean id="dataSource" class="org.springframework.jdbc....
本项目“spring 3.29+struts2.3.15.1+hibernate3 动态切换数据源”正是针对这一需求,通过整合Spring、Struts2和Hibernate3这三大经典Java EE框架,实现了数据源的灵活配置和动态切换。 首先,Spring作为Java应用中...
DataSourceTransactionManager用于管理数据库事务,而AbstractRoutingDataSource则允许动态选择数据源,从而实现切换到不同的数据库。 其次,Hibernate 4是一个流行的ORM(对象关系映射)工具,它简化了Java应用与...
本项目"一套Spring+Hibernate的多个数据库切换的源码"提供了一个实现这一功能的示例,它利用了Spring框架的强大功能和Hibernate的持久化能力,实现了灵活的数据源切换。 首先,Spring框架是Java开发中最常用的应用...
这些代码可以直接集成到你的项目中,只需要调整为匹配你的数据库配置,就可以实现Spring Boot 2下的多数据源支持,同时利用Hibernate和MyBatis的优势。 总之,多数据源的实现是Spring Boot 2应用中的高级特性,它...
本知识点主要探讨如何在Spring中集成Hibernate来实现多数据源的动态切换功能,这对于需要处理多种数据源的应用来说至关重要。 首先,我们需要理解什么是多数据源。多数据源意味着一个应用程序可以连接并操作多个...
2. 配置多数据源路由:SpringBoot提供了AbstractRoutingDataSource,可以根据业务逻辑动态切换数据源。例如,可以通过事务的隔离级别、方法的注解等方式决定使用哪个数据源。 3. 实现DAO层:在Hibernate的实体类和...
SSH动态切换数据源是一种在Java Web开发中处理多数据库连接切换的技术,主要应用于Spring、Struts和Hibernate(SSH)这三大框架集成的项目。SSH框架是企业级应用开发的常用组合,提供了强大的业务逻辑处理和数据持久...
总结来说,Spring Boot实现多数据源的关键在于正确配置多个数据源,创建相应的事务管理器,并在业务代码中灵活地切换和使用这些数据源。通过这种方式,我们可以充分利用多个数据库的资源,提升系统的扩展性和可靠性...
Spring框架的多数据源动态切换是一项关键功能,尤其在处理大型应用中,它允许系统根据需求灵活地在多个数据库之间切换,以实现更好的负载均衡和数据管理。在本文中,我们将深入探讨如何在Spring中配置和使用动态数据...
可以通过`@Qualifier`注解指定使用哪个数据源,或者使用`AbstractRoutingDataSource`动态路由数据源。 6. **JNDI数据源** 在应用服务器中,数据源通常以JNDI资源的形式存在。Spring可以查找并使用这些JNDI数据源,...
5. **配置数据源路由**:使用Spring的AbstractRoutingDataSource实现动态数据源选择。根据业务逻辑,它可以在运行时决定使用哪个数据源。 ```java public class DynamicDataSource extends ...
标题“spring2跨数据源访问”涉及到的是Spring框架在处理多数据源情况下的技术要点,主要涵盖如何在Spring应用中实现对多个数据库的灵活访问。在这个主题中,我们通常会讨论以下几个关键知识点: 1. **多数据源配置...
Spring多数据源解决方案是针对大型应用中数据分片和分布式数据库管理的需求而设计的一种策略。...在实际项目中,可以根据具体需求进行定制,例如使用更复杂的上下文判断规则,或者实现更高效的数据源切换策略。
`DynamicDataSource.java`文件可能是自定义的数据源切换器,它继承自Spring的`AbstractRoutingDataSource`,这个类允许我们在运行时根据某些条件(比如方法注解)动态选择数据源。你需要在这个类中实现`...
在Spring框架中实现多个数据源的注入,主要是为了解决项目中需要连接并动态切换不同数据库的需求。这种需求通常出现在多租户系统或者需要对不同客户提供差异化服务的场景。以下是一种基于Decorator设计模式的解决...
在实现动态数据库切换时,我们需要创建多个数据源配置。每个数据源代表一个数据库连接信息,包括URL、用户名、密码等。SpringMVC可以通过配置不同的`DataSource`bean来实现这一点。例如,我们可以创建两个`...