`

在spring中配置多个数据源,并实现动态切换

阅读更多
在spring中配置多个数据源,并实现动态切换
朋友遇到的问题,整理好了,我觉得不错,贴出来分享下。

spring中xml文件中的配置:
	<bean id="dataSource1"
		class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
		<property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property>

		<property name="jdbcUrl"><value>jdbc:oracle:thin:@127.0.0.1:1521:ORACLE</value></property>
		<property name="user"><value>htctposp</value></property> 
		<property name="password"><value>htctposp</value></property> 
		<property name="minPoolSize"><value>1</value></property> 
		<property name="maxPoolSize"><value>5</value></property> 
		<property name="maxIdleTime"><value>1800</value></property> 
		</bean>
   <bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/mysql?characterEncoding=UTF8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1111"></property>
    </bean> 
   
    <bean id="dataSource" class="com.huateng.util.DynamicDataSource">      
         <property name="targetDataSources">   
          <map key-type="java.lang.String">      
                <entry key="dataSource1" value-ref="dataSource1"/>   
                 <entry key="dataSource2" value-ref="dataSource2"/>   
             </map>     
          </property>      
          <property name="defaultTargetDataSource" ref="dataSource1"/>      
   	 </bean>


写两个工具类DbContextHolder和DynamicDataSource,如下:
public class DynamicDataSource extends AbstractRoutingDataSource{

	static Logger log=Logger.getLogger("DynamicDataSource");
	/* (non-Javadoc)
	 * @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#determineCurrentLookupKey()
	 */
	protected Object determineCurrentLookupKey() {
//		DbContextHolder.setDbType("2");
		return DbContextHolder.getDbType();
	}

}


public class DbContextHolder {
	private static final ThreadLocal contextHolder = new ThreadLocal();
	
	public static void setDbType(String dbType){
		contextHolder.set(dbType);
	}
	
	public static String getDbType(){
		return (String)contextHolder.get();
	}
	
	public static void clearDbType(){
		contextHolder.remove();
	}

}


一般在调用service层之前就要切换数据库(一般要在action中),切换数据库的代码:
DbContextHolder.setDbType("dataSource2");
分享到:
评论

相关推荐

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

    总结来说,SpringBoot实现多数据源和动态切换的关键在于正确配置多个数据源,创建自定义的AOP切面和ThreadLocal上下文。在实际项目中,还需要考虑事务管理、异常处理等复杂情况,确保数据的一致性和安全性。通过理解...

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

    1. **配置多数据源**:Spring Boot提供了DataSourceAutoConfiguration,它允许我们配置多个数据源。每个数据源可以有自己的配置,如JDBC连接池、数据库驱动、URL、用户名和密码等。我们可以使用@...

    mybatis+spring实现动态切换数据源

    1. **配置Spring**:首先,我们需要在Spring的配置文件中声明多个数据源。这些数据源可以是JDBC的DataSource实例,如Apache的DBCP或C3P0。每个数据源都有其特定的数据库连接信息,例如URL、用户名和密码。 ```xml ...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    - **配置文件**(yml格式):在application.yml中配置多个数据源的信息,使用`spring.datasource.druid`作为根路径,为每个数据源设置不同的路径,例如`db1`和`db2`。每个数据源下配置包括数据库类型、驱动类名、...

    Spring动态切换多数据源Demo

    "Spring动态切换多数据源Demo"是一个示例项目,它展示了如何在Spring中实现灵活的数据源切换。 首先,我们需要了解Spring中的数据源。在Spring中,数据源(DataSource)是Java中定义的javax.sql.DataSource接口的...

    Spring配置多个数据源并实现动态切换示例

    在Spring框架中,配置多个数据源并实现动态切换是一项常见的需求,特别是在大型系统中,可能需要连接到不同的数据库以满足不同业务场景的需求。本篇文章将详细介绍如何在Spring中配置两个不同的数据源,并实现它们...

    Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源

    1. 定义数据源配置:创建多个DataSource配置,每个数据源对应不同的数据库连接信息。 2. 使用Spring的AbstractRoutingDataSource作为基础数据源,它可以动态决定当前请求应使用哪个数据源。在运行时,...

    spring boot动态切换多数据源

    - `DataSourceConfig.java`:配置类,创建和管理多个数据源。 - `DynamicDataSourceRouter.java`:实现动态数据源路由,定义选择数据源的规则。 - `Service`和`Repository`层:在业务逻辑中使用动态数据源。 6. ...

    spring boot多数据源(AOP注解动态切换)

    在Spring Boot应用中,多数据源的配置与管理是一项重要的任务,特别是在大型系统中,可能需要连接到不同的...在实际项目中,你可能还需要考虑事务管理、数据源切换的异常处理等问题,确保整个系统的稳定性和一致性。

    springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip

    本项目——"spring-boot-easy-connection-pool-master",主要探讨了如何在Spring Boot环境下配置和管理连接池,并且实现了动态配置多数据源的功能,这对于大数据部门和数据中台服务尤其重要。 首先,让我们深入理解...

    SpringBoot实现动态切换数据源(含源码)

    在实际应用中,我们需要在Spring Boot的配置文件(`application.yml`或`application.properties`)中定义多个数据源,然后在`@Configuration`类中配置`DynamicDataSource`,使其能够根据业务逻辑动态选择数据源。...

    SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询.pdf

    在SpringBoot项目中,整合Mybatis-Plus并实现多数据源的动态切换,同时支持分页查询是一项常见的需求。以下将详细阐述这个过程中的关键步骤和技术要点。 首先,我们需要引入必要的Maven依赖。这里提到了四个关键...

    spring boot多数据源配置

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...

    使用springboot + JPA / MyBatis 实现多数据源动态切换

    3. **数据源配置**:MyBatis同样需要配置多个数据源,可以通过自定义SqlSessionFactoryBean和SqlSessionTemplate来实现。 4. **动态数据源切换**:对于MyBatis,可以在SqlSessionTemplate中设置数据源,或者使用`@...

    spring mvc 配置多数据源

    首先,在项目的`application.properties`文件中配置两个数据源:Oracle和MySQL。 ```properties # Oracle数据源配置 jdbc.driver=oracle.jdbc.OracleDriver jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:dev jdbc....

    spring mybatis 多数据源动态切换

    本文将深入探讨如何在 Spring 中配置和管理多个数据源,并实现动态切换。 首先,我们需要理解“多数据源”是什么。它是指在一个应用中同时连接并操作多个不同的数据库,这些数据库可能具有不同的结构,服务于不同的...

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    在多数据源场景下,SpringBoot允许我们配置多个数据源,这在分布式系统或者数据库分片场景中非常实用。 Atomikos是一个开源的事务管理器,它实现了Java Transaction API (JTA),支持全局事务处理。在分布式系统中,...

    spring 动态切换数据源

    在Spring框架中,动态切换数据源是一项重要的功能,它允许应用程序根据业务需求在多个数据库之间灵活切换。这一特性对于多租户系统、读写分离、分布式数据库等场景尤其有用。以下将详细介绍如何实现Spring的动态数据...

    Spring管理配置多个数据源

    在Spring框架中,管理多个数据源是一项常见的任务,特别是在大型分布式系统中,可能需要连接到不同的数据库以实现数据隔离或优化性能。这篇博客主要探讨了如何在Spring中配置和管理多个数据源,以便灵活地处理不同的...

    Spring Boot+Jpa多数据源配置Demo(支持不同数据库)

    在Spring Boot中,我们可以通过创建不同的`DataSource` bean来配置多个数据源。每个数据源通常会有一个对应的`JdbcTemplate`或`JpaEntityManagerFactory`。首先,我们需要在`application.yml`或`application....

Global site tag (gtag.js) - Google Analytics