`
ghostjohn
  • 浏览: 18317 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring多数据源的实现

 
阅读更多
1、多数据源以JNDI形式为例(其他的形式同理,在配置数据源地方配置多个即可)
     在tomcat中的context.xml文件中配置多个数据源。

   例如:

     <Resource

       name="jdbc/zlxt0"               

       type="javax.sql.DataSource" 

       password="bpms"

       driverClassName="oracle.jdbc.driver.OracleDriver"

       maxIdle="5"

       maxWait="5000"

       username="bpms"

       url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"

       maxActive="100"/>

      <Resource

       name="jdbc/zlxt1"               

       type="javax.sql.DataSource" 

       password="bpms1"

       driverClassName="oracle.jdbc.driver.OracleDriver"

       maxIdle="5"

       maxWait="5000"

       username="bpms1"

       url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"

       maxActive="100"/>

      <Resource

       name="jdbc/zlxt2"               

       type="javax.sql.DataSource" 

       password="czwd0216"

       driverClassName="oracle.jdbc.driver.OracleDriver"

       maxIdle="5"

       maxWait="5000"

       username="czwd0216"

       url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"

       maxActive="100"/>

2、spring的配置文件applicationContext.xml中配置多个jndi,并配置数据源.

例如:
<jee:jndi-lookup id="ds0" jndi-name="java:comp/env/jdbc/zlxt0"/>
    <jee:jndi-lookup id="ds1" jndi-name="java:comp/env/jdbc/zlxt1"/>
    <jee:jndi-lookup id="ds2" jndi-name="java:comp/env/jdbc/zlxt2"/>
// 下文中 class="app.util.mulds.DynamicDataSource"> 是扩展的处理类(参见步骤3)
<bean id="dataSource" class="app.util.mulds.DynamicDataSource">     
            <property name="targetDataSources">     
               <map key-type="java.lang.String">     
                  <entry key="0" value-ref="ds0"/>  
                  <entry key="1" value-ref="ds1"/> 
                  <entry key="2" value-ref="ds2"/> 
               </map>     
            </property>    
             <property name="defaultTargetDataSource" ref="ds1"/> 
</bean>

3、步骤2中的DynamicDataSource类的具体的实现

public class DynamicDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		return DBContextHolder.getDsKey();
	}

}

 4步骤3中的DBContextHolder类的实现

public class DBContextHolder {
	private static final ThreadLocal contextHolder = new ThreadLocal();
	
	public static void setDsKey(String dsKey){
		contextHolder.set(dsKey);
	}
	
	public static String getDsKey(){
		return (String)contextHolder.get();
	}
	
}

 5、在BO层中的新添加如下2行代码(如果不添加这2行代码,则程序调用时默认数据源)

// ChangeDsImpl1 是给开发人员进行业务扩展用的,即开发人员可以实现业务规则判断调用哪个数据源的代码地方(如果该方法需要添加参数,开发人员可任意修改)

ChangeDsImpl1 changeDsImpl1 = new ChangeDsImpl1();

//将业务处理规则判断出的数据源用于这次处理。
DBContextHolder.setDsKey(changeDsImpl1.getDsKey());

6、类ChangeDsImpl1<!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]-->

public class ChangeDsImpl1 {

	@根据参数返回数据源的Key
	public String getDsKey(String... parms) {
			return "2";
}

}

 7、文档中涉及到的代码对应的文件都在附件中,可以参考

分享到:
评论

相关推荐

    spring 动态多数据源配置代码

    2. **Spring多数据源实现方式**: Spring可以通过XML配置或Java配置来实现多数据源。Java配置更符合现代开发习惯,也更易于理解和维护。 3. **核心组件**: - `AbstractRoutingDataSource`:这是Spring提供的核心...

    java spring 多数据源

    在Java Spring框架中,多数据源的实现是一个重要的特性,特别是在大型企业级应用中,它允许应用程序连接到多个数据库,从而实现数据隔离、负载均衡或读写分离等高级功能。本教程将深入探讨如何在Spring中配置和管理...

    spring多数据源

    通过以上步骤,我们可以成功地在Spring应用中实现多数据源配置,灵活地管理和切换不同的数据库。这在大型分布式系统中尤其有用,能帮助我们构建更加健壮、高效的数据库访问架构。在实际项目中,还可以结合Spring ...

    SpringBoot配置多数据源实现动态切换数据源

    SpringBoot实现多数据源主要依靠Spring的`@Configuration`和`@DataSourceConfiguration`注解,以及Spring JDBC的`DataSource`接口。下面是一个基本的配置示例: ```java @Configuration public class ...

    基于Spring多数据源实例

    本文将深入探讨如何在一个基于Spring框架的应用中实现多数据源的动态切换,以"基于SSI+Oracle架构的多数据源动态切换实例"为例进行详细讲解。 首先,我们需要理解什么是多数据源。多数据源是指在一个应用中同时连接...

    Spring多数据源分布式事务管理

    在Spring中,我们可以通过DataSourceProxy和AbstractRoutingDataSource来实现多数据源的切换。DataSourceProxy是Spring的一个代理类,它可以对数据源进行包装,以便在执行SQL语句前决定使用哪个数据源。...

    mybatis spring 多数据源

    标题 "mybatis spring 多数据源" 涉及到的是在Java开发中,如何使用MyBatis和Spring框架来管理多个数据库连接。这通常在需要处理来自不同数据源的数据或者实现数据库读写分离的场景下应用。MyBatis是一个优秀的持久...

    spring boot多数据源配置

    通过以上步骤,我们就完成了Spring Boot的多数据源配置,实现了从数据源配置、实体管理、Mapper到Controller的完整业务流程。在实际开发中,可以根据具体需求进行调整,例如增加事务管理、数据源切换策略等。

    spring数据源配置

    - **`class`**: 指定数据源实现类。 - **`driverClassName`**: 数据库驱动类名。 - **`url`**: 数据库连接地址。 - **`username`**: 数据库登录用户名。 - **`password`**: 数据库登录密码。 ##### 2. Hibernate ...

    动态数据源实现spring

    通过这样的方式,Spring的动态数据源实现为开发者提供了极大的便利,使得在多数据库环境中编写代码变得更加简单和灵活。在实际项目中,我们还可以结合Spring的事务管理、AOP切面等特性,实现更加复杂的数据源切换...

    spring多数据源的处理_mybatis实现跨库查询

    为了实现多数据源处理,我们需要定义一个动态数据源类,继承 AbstractRoutingDataSource,并实现方法 determineCurrentLookupKey,该方法返回一个 Object,一般是返回字符串。然后,我们需要建立一个获得和设置上...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    在Spring Boot 2框架中,实现多数据源的配置是一项重要的任务,特别是在大型企业级应用中,可能需要连接到不同的数据库来满足不同业务的需求。在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,...

    spring boot AOP注解方式实现多数据源

    本文将深入探讨如何使用Spring Boot的AOP注解方式来实现多数据源的集成。 首先,我们要了解Spring Boot的基础概念。Spring Boot简化了Spring应用程序的创建,它提供了自动配置、起步依赖等特性,使得开发者可以快速...

    Springcloud 多数库 多数据源整合,查询动态切换数据库

    本主题聚焦于在Spring Cloud环境中实现多数据库和多数据源的整合,并且能够动态切换查询的数据库。这是一个复杂但至关重要的需求,特别是在大型企业级应用中,可能需要根据业务逻辑或用户权限连接到不同的数据库。 ...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论多数据源回滚策略。以下是对这些知识点的详细说明: 1. **动态数据源切换**: - 通过AspectJ实现数据源的动态切换,可以设置在...

    Spring+Hibernate多数据源

    本示例将探讨如何在Spring和Hibernate环境中实现多数据源的配置与管理。 首先,我们来看标题"Spring+Hibernate多数据源",这意味着我们要在一个项目中同时配置和使用两个数据源。通常,这涉及到创建两个不同的...

    Spring多数据源解决方案

    以下是一个Spring实现多数据源的简单例子: ```java public class DynamicDataSource extends AbstractRoutingDataSource { private static final Logger log = Logger.getLogger("DynamicDataSource"); @...

    Spring配置多个数据源

    Spring框架提供了一种灵活的方式来配置和管理多个数据源,使得这种需求变得简单易行。本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储...

    Spring获取数据源代码

    - **BasicDataSource**: Spring内置的`org.springframework.jdbc.datasource.BasicDataSource`是最常用的数据源实现,它基于Apache Commons DBCP库,提供连接池功能。 - **DataSourceTransactionManager**: 这是...

Global site tag (gtag.js) - Google Analytics