利用Spring、JNDI切换数据源
publicclass DataSourceManager extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
String key = ContextHolder.getDataSource();// 获取key
return key;// 返回当前线程实际的DataSource对应的Key
}
}
publicclass ContextHolder {
publicstaticfinal ThreadLocal<String> context = new ThreadLocal<String>();
publicstatic String getDataSource() {
returncontext.get();
}
publicstaticvoid setDataSource(String dataSource){
context.set(dataSource);
}
publicstaticvoid clear() {
context.remove();
}
}
<!-- 使用JBOSS jndi resourceRef属性用来指定是否预准备前缀:java:comp/env/,默认false-->
<bean id="dataSource1" class="org.springframework.jndi.JndiObjectFactoryBean"
lazy-init="true">
<property name="jndiName" value="java:TestDb" />
<property name="resourceRef" value="true" />
</bean>
<!-- 使用JBOSS jndi-->
<bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean"
lazy-init="true">
<property name="jndiName" value="java:OracleDS" />
<property name="resourceRef" value="true" />
</bean>
<!-- 用JNDI的切换实现切库操作-->
<bean id="dataSource" class="dynamicDataSource.DataSourceManager">
<property name="targetDataSources">
<map>
<entry key="mysql" value-ref="dataSource1" /> <entry key="oracle" value-ref="dataSource2" />
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1" />
</bean>
切库语句:
ContextHolder.setDataSource("oracle");//默认库为mysql数据库,在此切换为Oracle数据库
相关推荐
SSH动态切换数据源是一种在Java Web开发中处理多数据库连接切换的技术,主要应用于Spring、Struts和Hibernate(SSH)这三大框架集成的项目。SSH框架是企业级应用开发的常用组合,提供了强大的业务逻辑处理和数据持久...
这样,我们可以在运行时根据业务需求灵活地切换数据源。 6. **分布式事务控制** AtomikosDataSource支持JTA事务,这意味着我们可以在同一个事务中操作多个数据源。Spring的`@Transactional`注解可以用来开启和管理...
在Spring框架中,动态数据源实现是一个重要的特性,它允许应用程序根据特定的条件或用户需求在运行时切换数据源。这种灵活性对于多租户系统、数据隔离或者在不同环境(如开发、测试、生产)之间切换数据库配置尤其...
在Spring框架中,配置数据源是一项至关重要的任务,因为数据源是应用程序与数据库交互的桥梁。Spring提供了多种方式来配置数据源,以适应不同的应用场景和需求。以下将详细阐述Spring配置各种数据源的方法、原理以及...
在Spring中,我们可以通过DataSourceProxy和AbstractRoutingDataSource来实现多数据源的切换。DataSourceProxy是Spring的一个代理类,它可以对数据源进行包装,以便在执行SQL语句前决定使用哪个数据源。...
4. 自定义切换逻辑:编写代码来根据业务需求动态选择使用哪个数据源。 接下来,我们谈谈JTA和分布式事务。在微服务架构中,跨服务的数据一致性是非常重要的,这就需要用到分布式事务。JTA是Java平台中处理分布式...
基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务。一个基于springboot的快速集成多数据源的启动器。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主...支持 多层数据源嵌套切换 。
在SpringMVC项目中,我们可以通过Spring的`AbstractRoutingDataSource`类来实现动态切换数据源的功能。这个类允许我们在运行时根据特定条件(如事务、业务逻辑等)选择要使用的数据源。 1. **创建数据源bean** 为...
4. **AOP代理和数据源切换**:通过Spring的AOP(面向切面编程)功能,可以在运行时动态选择使用哪个数据源。例如,可以根据方法的注解或请求参数来决定。 5. ** CXF服务配置**:在CXF服务中,我们可以使用Spring的`...
在Java中,我们通常通过Java的Context和Initial LifeCycle(JNDI)服务或者Spring框架来管理数据源。 动态创建数据源一般涉及以下步骤: 1. **导入依赖**:项目中需要包含JDBC驱动的jar包,例如MySQL的`mysql-...
JNDI是一种服务,它提供了一个接口来查找和管理Java对象的名称,这些对象可以是消息队列、数据源或者其他服务。在Spring中,JNDI通常用于查找消息队列的位置,这样应用就可以通过JMS模板发送或接收消息。JNDI查找...
一个基于springboot的快速集成多数据源的启动器简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk 1.7 +,SpringBoot 1.4.x 1.5.x 2.xx。文件| 文献资料|特性...
支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。 提供 基于seata的分布式事务方案 。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 加
5. **切换数据源**:在业务逻辑中,可以通过Spring的`@Resource`注解注入不同的数据源bean,根据业务需求动态选择数据源执行SQL操作。 6. **处理异常**:在分布式事务中,必须正确处理异常,例如,如果一个事务分支...
通过配置多个数据源,开发者可以轻松地管理和切换这些数据库连接,实现数据的高效访问。 在实际使用中,开发者可以通过 JNDI 查找或直接实例化 DataSource 对象来获取数据库连接。此外,由于这个框架是基于 JDBC ...
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式...支持 多层数据源嵌套切换 。
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式...支持 多层数据源嵌套切换 。
3. 数据源管理:Spring提供多种数据源管理方式,如单例数据源、多数据源,支持JNDI查找,便于实现数据库连接的管理和切换。 4. ORM集成:Spring支持多种ORM框架,如Hibernate、JPA、MyBatis等,提供统一的DAO层接口...
2. **构建Hibernate**:配置Hibernate,使其由Spring管理,这包括设置数据源、方言等属性,以及利用JNDI进行数据源的连接。 3. **构建Struts**:配置Struts框架,使其能够与Spring和Hibernate协同工作。 #### 最后...