`

spring管理数据源的动态更换

 
阅读更多

 

 

    
    
    
    <bean id="dataSource" class="com.chnedu.common.util.MultiDataSource">
        <property name="dataSource" ref="dataSource_a"/><!-- 默认连接数据库a -->
    </bean>	

    






import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;


public class MultiDataSource implements DataSource,ApplicationContextAware{
    private ApplicationContext applicationContext=null;
    private DataSource dataSource = null;
	
	@Override
	public PrintWriter getLogWriter() throws SQLException {
		return getDataSource().getLogWriter();
	}

	@Override
	public int getLoginTimeout() throws SQLException {
		return getDataSource().getLoginTimeout();
	}

	@Override
	public void setLogWriter(PrintWriter arg0) throws SQLException {
		getDataSource().setLogWriter(arg0);
	}

	@Override
	public void setLoginTimeout(int arg0) throws SQLException {
		getDataSource().setLoginTimeout(arg0);
	}

	@Override
	public boolean isWrapperFor(Class<?> arg0) throws SQLException {
		return getDataSource().isWrapperFor(arg0);
	}

	@Override
	public <T> T unwrap(Class<T> arg0) throws SQLException {
		return getDataSource().unwrap(arg0);
	}

	@Override
	public void setApplicationContext(ApplicationContext arg0)
			throws BeansException {
		this.applicationContext = arg0;
	}

	@Override
	public Connection getConnection() throws SQLException {
		return getDataSource().getConnection();
	}

	@Override
	public Connection getConnection(String arg0, String arg1)
			throws SQLException {
		return getDataSource().getConnection(arg0, arg1);
	}
    
	public DataSource getDataSource() {
		//根据session 中变量更换数据源
		Object siteId = StrutsUtil.getSession().get( Constants.SESSION_SITE_ID  );
		if(siteId==null || "".equals( siteId)){
			return dataSource;
		}else if( Constants.ACC_SITE_ID.equals( siteId)){
			dataSource = (DataSource) this.applicationContext.getBean("dataSource_a"); 
		}else {
			dataSource = (DataSource) this.applicationContext.getBean( "dataSource_b") ;
		}
		return dataSource;
	}

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}
 

}

 

分享到:
评论

相关推荐

    spring多数据源动态切换方案

    总结,Spring多数据源动态切换方案主要涉及创建多个数据源、使用AbstractRoutingDataSource进行动态路由、配置事务管理和在代码中切换数据源。通过这种方式,我们可以灵活地处理复杂的数据源切换场景,适应不同业务...

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

    3. **配置MyBatis**:在MyBatis的配置中,我们将使用Spring管理的数据源,而不是直接创建SqlSessionFactory。在`mybatis-spring`的配置中,我们指定使用Spring的`SqlSessionFactoryBean`,并将数据源设置为我们的...

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

    在Spring Boot项目中实现多数据源动态切换是一项高级特性,能够使应用根据不同业务需求访问不同的数据库,从而实现服务的解耦和数据库操作的优化。该技术的关键在于如何在同一个应用中配置和使用多个数据源,以及...

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

    本文将深入探讨如何在SpringBoot项目中配置多数据源,并实现数据源的动态切换,帮助你理解和掌握这一核心技能。 首先,我们理解"多数据源"的概念。在SpringBoot应用中,多数据源意味着系统能够连接并操作多个不同的...

    Spring动态切换多数据源Demo

    总的来说,"Spring动态切换多数据源Demo"是一个实战教程,旨在教你如何在Spring应用程序中实现数据源的动态切换,以及如何处理相关的配置和事务管理。通过学习这个Demo,你可以掌握在Spring环境中处理多数据库连接的...

    spring 动态切换数据源

    综上所述,Spring动态切换数据源是通过配置不同数据源,结合`AbstractRoutingDataSource`子类和`ThreadLocal`管理的策略,实现在运行时选择合适的数据源执行SQL操作。这一机制极大地增强了系统的灵活性和可扩展性。

    真正意义的spring动态切换数据源源码

    **MyBatis与Spring集成**:在使用MyBatis作为持久层框架时,可以通过Spring的`SqlSessionFactoryBean`与动态数据源结合,配置`dataSource`属性为我们的动态数据源bean,使MyBatis能够使用由Spring管理的动态数据源。...

    spring mybatis 多数据源动态切换

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

    spring动态数据源+mybatis分库分表

    1. **Spring动态数据源**:Spring框架提供了动态数据源支持,允许我们在运行时根据需求切换或选择不同的数据源。这主要通过`AbstractRoutingDataSource`类实现,该类能够根据某种策略(如事务ID、用户名等)动态决定...

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

    本项目“Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源”正是针对这一需求提供的一种解决方案。下面将详细介绍这个项目中的关键技术点和实现原理。 首先,Spring框架是Java企业级应用开发的核心...

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

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

    spring boot数据源切换demo

    在Spring Boot应用中,数据源切换是一个常见的需求,特别是在分布式系统...在实际开发中,可以根据业务需求进行调整和优化,比如使用数据库路由策略自动选择数据源,或者利用Spring Cloud Data Flow进行数据源管理。

    动态数据源实现spring

    在Spring框架中,动态数据源实现是一个重要的特性,它允许应用程序根据特定的条件或用户需求在运行时切换数据源。这种灵活性对于多租户系统、数据隔离或者在不同环境(如开发、测试、生产)之间切换数据库配置尤其...

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

    在大型分布式系统中,往往需要处理多个数据源,这就涉及到了Spring多数据源的配置和管理。同时,为了保证数据的一致性,分布式事务的管理也是必不可少的。在这个场景下,Atomikos作为一款开源的JTA(Java ...

    基于Spring多数据源实例

    总之,实现基于Spring的多数据源动态切换是一项复杂但必要的任务,它涉及到数据库连接管理、事务控制、AOP编程等多个方面。通过理解上述步骤和原理,开发者可以更好地设计和实施适用于各种业务场景的多数据源解决...

    spring多数据源

    Spring多数据源允许我们在一个应用中同时管理多个数据库连接,通过切换不同的数据源来满足不同业务的需求。实现这一功能的关键在于Spring的DataSourceTransactionManager和AbstractRoutingDataSource。 1. **...

    spring boot动态切换多数据源

    在Spring Boot应用中,动态切换多数据源是一项重要的功能,尤其在处理分布式系统或需要针对不同数据库进行数据隔离的场景下。本项目提供了一个完整的示例,帮助开发者理解和实现这一特性。 1. **Spring Boot简介** ...

    spring动态切换数据源

    在Java的Spring框架中,动态切换数据源是一项重要的功能,尤其在多租户、微服务或者需要根据业务逻辑切换数据库的场景下。本知识点主要围绕如何在Spring中实现数据源的动态切换进行深入探讨。 首先,我们需要理解...

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

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

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

    在现代企业级应用开发...总的来说,Spring Boot结合JPA或MyBatis实现多数据源动态切换,不仅提高了系统的灵活性,还便于进行数据库扩展和管理。理解和掌握这一技术,对于提升系统设计能力和解决复杂问题具有重要意义。

Global site tag (gtag.js) - Google Analytics