在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、文档中涉及到的代码对应的文件都在附件中,可以参考
相关推荐
2. **Spring多数据源实现方式**: Spring可以通过XML配置或Java配置来实现多数据源。Java配置更符合现代开发习惯,也更易于理解和维护。 3. **核心组件**: - `AbstractRoutingDataSource`:这是Spring提供的核心...
在Java Spring框架中,多数据源的实现是一个重要的特性,特别是在大型企业级应用中,它允许应用程序连接到多个数据库,从而实现数据隔离、负载均衡或读写分离等高级功能。本教程将深入探讨如何在Spring中配置和管理...
通过以上步骤,我们可以成功地在Spring应用中实现多数据源配置,灵活地管理和切换不同的数据库。这在大型分布式系统中尤其有用,能帮助我们构建更加健壮、高效的数据库访问架构。在实际项目中,还可以结合Spring ...
SpringBoot实现多数据源主要依靠Spring的`@Configuration`和`@DataSourceConfiguration`注解,以及Spring JDBC的`DataSource`接口。下面是一个基本的配置示例: ```java @Configuration public class ...
本文将深入探讨如何在一个基于Spring框架的应用中实现多数据源的动态切换,以"基于SSI+Oracle架构的多数据源动态切换实例"为例进行详细讲解。 首先,我们需要理解什么是多数据源。多数据源是指在一个应用中同时连接...
在Spring中,我们可以通过DataSourceProxy和AbstractRoutingDataSource来实现多数据源的切换。DataSourceProxy是Spring的一个代理类,它可以对数据源进行包装,以便在执行SQL语句前决定使用哪个数据源。...
标题 "mybatis spring 多数据源" 涉及到的是在Java开发中,如何使用MyBatis和Spring框架来管理多个数据库连接。这通常在需要处理来自不同数据源的数据或者实现数据库读写分离的场景下应用。MyBatis是一个优秀的持久...
通过以上步骤,我们就完成了Spring Boot的多数据源配置,实现了从数据源配置、实体管理、Mapper到Controller的完整业务流程。在实际开发中,可以根据具体需求进行调整,例如增加事务管理、数据源切换策略等。
- **`class`**: 指定数据源实现类。 - **`driverClassName`**: 数据库驱动类名。 - **`url`**: 数据库连接地址。 - **`username`**: 数据库登录用户名。 - **`password`**: 数据库登录密码。 ##### 2. Hibernate ...
通过这样的方式,Spring的动态数据源实现为开发者提供了极大的便利,使得在多数据库环境中编写代码变得更加简单和灵活。在实际项目中,我们还可以结合Spring的事务管理、AOP切面等特性,实现更加复杂的数据源切换...
为了实现多数据源处理,我们需要定义一个动态数据源类,继承 AbstractRoutingDataSource,并实现方法 determineCurrentLookupKey,该方法返回一个 Object,一般是返回字符串。然后,我们需要建立一个获得和设置上...
在Spring Boot 2框架中,实现多数据源的配置是一项重要的任务,特别是在大型企业级应用中,可能需要连接到不同的数据库来满足不同业务的需求。在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,...
本文将深入探讨如何使用Spring Boot的AOP注解方式来实现多数据源的集成。 首先,我们要了解Spring Boot的基础概念。Spring Boot简化了Spring应用程序的创建,它提供了自动配置、起步依赖等特性,使得开发者可以快速...
本主题聚焦于在Spring Cloud环境中实现多数据库和多数据源的整合,并且能够动态切换查询的数据库。这是一个复杂但至关重要的需求,特别是在大型企业级应用中,可能需要根据业务逻辑或用户权限连接到不同的数据库。 ...
在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论多数据源回滚策略。以下是对这些知识点的详细说明: 1. **动态数据源切换**: - 通过AspectJ实现数据源的动态切换,可以设置在...
本示例将探讨如何在Spring和Hibernate环境中实现多数据源的配置与管理。 首先,我们来看标题"Spring+Hibernate多数据源",这意味着我们要在一个项目中同时配置和使用两个数据源。通常,这涉及到创建两个不同的...
以下是一个Spring实现多数据源的简单例子: ```java public class DynamicDataSource extends AbstractRoutingDataSource { private static final Logger log = Logger.getLogger("DynamicDataSource"); @...
Spring框架提供了一种灵活的方式来配置和管理多个数据源,使得这种需求变得简单易行。本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储...
- **BasicDataSource**: Spring内置的`org.springframework.jdbc.datasource.BasicDataSource`是最常用的数据源实现,它基于Apache Commons DBCP库,提供连接池功能。 - **DataSourceTransactionManager**: 这是...