`

spring2 多数据库动态切换 案例

阅读更多
1. 创建class----SourceType.java
public enum SourceType {
    suning,
    english,
    gehualily
}


2. 创建class ---DynamicDataSource.java
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  

public class DynamicDataSource extends AbstractRoutingDataSource{ 

       protected Object determineCurrentLookupKey() { 
              return JdbcContextHolder.getJdbcType(); 
       } 

} 


3. 创建class ----JdbcContextHolder.java

public class JdbcContextHolder {

	private static final ThreadLocal<SourceType> contextHolder = new ThreadLocal<SourceType>();

	public static void setJdbcType(SourceType jdbcType) {

		contextHolder.set(jdbcType);

	}

	/*
	 * public static String getJdbcType() { return (String) contextHolder.get(); }
	 */
   //默认的数据源
	public static SourceType getJdbcType() {
		SourceType str = (SourceType) contextHolder.get();
		if(str==null){
			str=SourceType.english;
		}
		return str;
	}

	public static void clearJdbcType() {
		contextHolder.remove();

	}

}




4. spring.xml:

<?xml  version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/context
			http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/tx
			http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
			http://www.springframework.org/schema/mvc
			http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
			http://www.springframework.org/schema/task
			http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!--以下为数据源,可根据需求添加多个-->	

<bean id="SuNingDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
<property name="driver" value="com.mysql.jdbc.Driver" /> 
<property name="driverUrl" value="jdbc:mysql://localhost:3306/suning" /> 
<property name="user" value="root" /> 
<property name="password" value="123" /> 
	
</bean> 

<bean id="EnglishataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
<property name="driver" value="com.mysql.jdbc.Driver" /> 
<property name="driverUrl" value="jdbc:mysql://localhost:3306/lilye" /> 
<property name="user" value="root" /> 
<property name="password" value="123" /> 
</bean>  

<bean id="GHLilyDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
<property name="driver" value="com.mysql.jdbc.Driver" /> 
<property name="driverUrl" value="jdbc:mysql://192.168.1.1:3306/test" /> 
<property name="user" value="root" /> 
<property name="password" value="123" /> 
</bean>  

<!-- DynamicDataSource为上面的类,sourceType为枚举类,key为枚举的值,对应不同的数据源-->
<bean id="dataSource" class="cn.com.fly.util.DynamicDataSource">  
        <property name="targetDataSources">  
            <map key-type="cn.com.fly.util.SourceType">  
                <entry key="suning" value-ref="SuNingDataSource"/>  
                <entry key="english" value-ref="EnglishDataSource"/> 
                <entry key="gehualily" value-ref="GHLilyDataSource"/>
            </map>  
        </property>  
        <property name="defaultTargetDataSource" ref="LilyEnglishDataSource"/>        
    </bean>     
<!-- end  defaultTargetDataSource为默认数据库-->

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan" value="cn.com.fly.domain" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
				</prop>
				<prop key="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider
				</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hiberante.format_sql">true</prop>
				<prop key="hibernate.connection.release_mode">after_statement</prop>
				<prop key="hibernate.connection.autocommit">false</prop>
			</props>
		</property>
	</bean>

	<bean id="hibernateTransactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>


	<tx:annotation-driven transaction-manager="hibernateTransactionManager" />


	<!-- 自动扫描的包名 -->
	<context:component-scan base-package="cn.com.abc" />

	<!-- 默认的注解映射的支持 -->
	<mvc:annotation-driven />

	<!-- 视图解释类 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 定时任务 -->
	<task:annotation-driven/>

	<!--
		拦截器 <mvc:interceptors> <bean class="cn.com.fly.MyInteceptor" />
		</mvc:interceptors>
	-->

	<!-- 对静态资源文件的访问
 	<mvc:default-servlet-handler/> -->
</beans>


5.应用案例:

在使用方法之前,加上
JdbcContextHolder.setJdbcType(SourceType.english);

若不用枚举类,key值可以直接用字符串。

实体类和表都不用添加什么别的代码,经过测试,每个方法只可切换一次数据库。

0
6
分享到:
评论

相关推荐

    springboot+druid+mybatis多数据源动态切换案例

    本案例中,"springboot+druid+mybatis多数据源动态切换"主要涉及以下几个核心知识点: 1. **SpringBoot多数据源配置**:SpringBoot通过@ConfigurationProperties注解可以从配置文件中读取数据源的相关信息,如URL、...

    Spring Boot中使用多个数据源 数据库.zip_常用数据库数据源

    如`Spring Boot中使用多数据库 - JDBC.url`、`spring-boot jpa 配置两个数据源 - CSDN博客.url`以及`spring boot(七):springboot+mybatis多数据源最简解决方案 - 纯洁的微笑 - 博客园.url`,了解更多详细信息和实践...

    springmvc+mybatis多数据源,aop动态切换

    本文将详细讲解如何将这两个框架整合,实现多数据源配置,并利用AOP(面向切面编程)进行动态切换,以达到数据库读写分离的目的。 **SpringMVC简介** SpringMVC是Spring框架的一部分,它是一个基于模型-视图-控制器...

    Struts 2 + Spring 2 + JPA + AJAX 示例

    Struts 2、Spring 2、JPA 和 AJAX 是企业级 Web 应用开发中的四大核心技术,它们在构建高效、可扩展的系统中扮演着重要角色。本示例结合这四种技术,提供了一个完整的应用实例,帮助开发者了解如何将它们整合在一起...

    基于SpringCloud的在线校园订餐系统源码+数据库(毕业设计).zip

    它涉及到了数据库设计、前端开发、后端服务架构等多个方面,是学习微服务架构和实战项目开发的良好案例。通过深入学习和分析这个系统,开发者可以掌握如何运用SpringCloud构建大规模、高可用的云原生应用。

    spring-boot自定注解,实现多个数据源之间的自动切换

    2. **AOP(面向切面编程)**:Spring Boot中的AOP允许我们在不修改业务代码的情况下添加横切关注点,例如日志记录、事务管理或在此案例中的数据源切换。 3. **自定义注解**:自定义注解可以让我们以声明式的方式...

    如何在spring框架中解决多数据源的问题

    为了解决上述问题,本文将介绍一种利用Spring框架结合Decorator设计模式来实现多数据源动态切换的方法。 #### 解决方案设计 ##### 1. 设计思路 - **多数据源配置**:在Spring的`applicationContext`中配置所有的...

    springboot多数据源配置(sqlserver,mysql)

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们连接并操作多个数据库,例如MySQL和SQL Server。在本场景中,我们将探讨如何在Spring Boot中设置和管理这样的多数据源配置。 首先,我们需要了解`...

    JavaEE多层架构Struts2+Spring3+Hibernate3+Ajax的整合

    ### JavaEE多层架构Struts2+Spring3+Hibernate3+Ajax的整合 #### 概述 随着软件开发技术的不断进步,构建可复用、易于扩展并经过良好测试的软件组件变得尤为重要。在此背景下,Struts、Spring 和 Hibernate 这三大...

    分布式数据源,数据源的动态寻找,分布式事务JTA实现-spring-jta-mybatis.zip

    此外,使用Spring的AOP(面向切面编程)和Spring Cloud Data Flow等工具也可以实现数据源的动态切换。 接着,我们来看分布式事务的处理。JTA是Java平台中用于管理跨系统事务的标准API,它允许在分布式环境中协调多...

    sqlSessionFactory方式-多数据源的案例代码

    总结来说,`sqlSessionFactory`方式的多数据源案例代码实现了在MyBatis中灵活地管理和切换多个数据库连接,这在大型分布式系统中尤为重要,能有效提高系统的扩展性和可靠性。通过理解和实践这样的案例,开发者可以更...

    java多数据源案例使用项目

    总的来说,"java多数据源案例使用项目"展示了如何通过Java和Spring框架实现跨数据库的业务代码复用。它利用动态数据源技术解决了两个子公司的员工信息管理问题,降低了系统复杂性和开发成本。通过深入理解这一技术,...

    spring-jdbc-RoutingDataSource

    在Spring JDBC模块中,RoutingDataSource是一个动态数据源,它可以根据一定的规则(比如基于数据库连接池的名字、运行时环境等)来决定使用哪个具体的数据源。这种方式允许我们在应用程序中灵活地切换或组合不同的...

    spring与hibernate以及ibatis集成的实例和具体配置图解

    "TestSpringIbatis"则可能是Spring与Ibatis集成的测试案例,展示了如何配置Ibatis的SqlSessionFactory和Mapper接口,以及如何在Spring中调用Ibatis的SQL查询。 集成Spring、Hibernate和Ibatis的过程通常包括以下...

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.pdf

    当点击Tree中的“查询订单”或“创建订单”节点时,页面会动态添加或切换到相应的标签页,如`searchorder.jsp`(订单查询列表页)和`createorder.jsp`(创建订单页)。 总的来说,这个案例展示了如何在一个Java Web...

    springboot配置多数据源小案例

    这只是一个基础的小案例,实际项目中可能还需要考虑更多因素,比如数据源的负载均衡、动态切换等高级功能。通过深入学习Spring Boot的自动配置机制和AOP原理,你可以进一步优化和扩展多数据源的实现。

    struts2+hibernate3+spring2.5的完整框架

    这个"struts2+hibernate3+spring2.5的完整框架"是一个典型的MVC(Model-View-Controller)架构,用于构建动态、数据驱动的Web应用程序。 Struts2是Action导向的框架,负责控制应用程序的流程。它通过定义Action类来...

    mysql,blob格式存储图片事例,商品展示页面

    本案例聚焦于使用MySQL数据库来存储商品图片,这是很多在线商店常见的做法。MySQL是一个流行的关系型数据库管理系统,因其高效、稳定和易于使用而备受青睐。在这个事例中,我们将深入探讨如何使用BLOB(Binary Large...

Global site tag (gtag.js) - Google Analytics