`
szlxh002
  • 浏览: 34454 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring动态数据源的配置及使用

 
阅读更多

    如果应用系统使用到多个数据源,可以使用Spring提供的动态数据源进行配置:

1.DynamicDataSource的设计

通过继承AbstractRoutingDataSource实现动态数据源的设计

 

public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {

        return DataSourceContextHolder.getDataSourceType();
    }

}

 DataSourceContextHolder类的设计:

 

 

public class DataSourceContextHolder {
    private static final ThreadLocal contextHolder = new ThreadLocal(); // 线程本地环境

    // 设置数据源类型
    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    // 获取数据源类型   
    public static String getDataSourceType() {
        return (String) contextHolder.get();
    }
    // 清除数据源类型

    public static void clearDataSourceType() {
        contextHolder.remove();
    }
}

 2.Spring的配置

 

假设有两个数据源framework及stk,

 

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx.xsd
	http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd" 
	>
    <context:component-scan base-package="com.framework.dao"/>
    <context:component-scan base-package="com.framework.dao.mssql"/>
    <context:component-scan base-package="com.framework.service"/>
    <context:component-scan base-package="com.framework.action"/>

    <context:component-scan base-package="com.stk.dao.mssql"/>
    <context:component-scan base-package="com.stk.service"/>
    <context:component-scan base-package="com.stk.action"/>

    
    <bean id="propertyConfigurerFW"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:framework.properties"/>
    </bean>

	<bean id="datasourceFW"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close" 
		p:driverClassName="${jdbc.driverClassName}"
		p:url="${jdbc.url}" 
		p:username="${jdbc.username}" 
		p:password="${jdbc.password}" />

    <bean id="datasourceStk"
          class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close"
          p:driverClassName="${jdbcstk.driverClassName}"
          p:url="${jdbcstk.url}"
          p:username="${jdbcstk.username}"
          p:password="${jdbcstk.password}" />


    <!-- 编写spring 配置文件的配置多数源映射关系 -->
    <bean class="com.framework.dao.DynamicDataSource"
          id="dataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry value-ref="datasourceFW" key="framework"></entry>
                <entry value-ref="datasourceStk" key="stk"></entry>
            </map>
        </property>
        <property name="defaultTargetDataSource"
                  ref="datasourceFW">
        </property>
    </bean>



    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--  -->
        <property name="packagesToScan" value="com.framework.domain,com.stk.domain"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">com.util.SQLServerDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <!--  3.1
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
               -->
                <!--  4.0-->
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>

            </props>
        </property>
    </bean>

    <bean id="hibernateTemplate"
          class="org.springframework.orm.hibernate4.HibernateTemplate"
          p:sessionFactory-ref="sessionFactory" />
   </beans>

 

3.DAO的使用

 

DataSourceContextHolder.setDataSourceType("framework");

frameworkDAO.操作()

 

DataSourceContextHolder.setDataSourceType("stk");

stkDAO.操作()

 

 

 

 

分享到:
评论

相关推荐

    spring数据源配置

    ### Spring 数据源配置详解 #### 一、Spring与数据源简介 在Java企业级应用开发中,数据库操作是必不可少的一部分。Spring框架作为一种流行的轻量级Java应用开发框架,提供了强大的数据库访问支持,其中包括对数据...

    spring 动态多数据源配置代码

    下面将详细介绍Spring动态多数据源配置的相关知识点。 1. **为什么要使用多数据源**: 在实际项目中,可能需要连接到不同的数据库,例如,一个用于存储主业务数据,另一个用于日志记录或数据分析。通过多数据源...

    spring boot多数据源配置

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

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

    多数据源配置允许我们灵活地管理这些数据。 SpringBoot实现多数据源主要依靠Spring的`@Configuration`和`@DataSourceConfiguration`注解,以及Spring JDBC的`DataSource`接口。下面是一个基本的配置示例: ```java...

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

    在"spring-routing-datasource"这个文件中,可能包含了实现Spring动态数据源的示例代码,包括配置文件、路由数据源的实现以及与MyBatis的集成。通过研究这个例子,你可以更深入地理解如何在实际项目中部署和使用这种...

    基于注解和Spring的多数据源配置和使用

    本篇文章将深入探讨如何基于注解和Spring实现多数据源配置和使用。 首先,我们需要理解"注解"在Java中的作用。注解是一种元数据,它提供了一种安全的方法来关联信息和代码(类、方法、变量等)。Spring框架广泛使用...

    Spring多数据源配置

    Spring多数据源配置,支持mysql、oracle等多个数据源同时存在的情况

    Spring 数据源不同配置

    如果使用Spring Data JPA或Hibernate,数据源配置更为简单,因为它们会自动创建并管理数据源。Spring Data JPA通过`spring-boot-starter-data-jpa`依赖自动配置了JPA和HikariCP数据源。 总的来说,Spring提供了...

    SSM(Spring+SpringMVC+MyBatis)多数据源配置框架

    在多数据源配置中,Spring能够帮助管理不同的数据源,通过配置bean来切换和控制数据源的使用。 **SpringMVC** 是Spring框架的一部分,专为Web开发设计。它简化了模型-视图-控制器(Model-View-Controller,MVC)的...

    spring数据源配置解析

    阐述spring的数据源配置

    动态数据源实现spring

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

    mybatis-plus多数据源/动态数据源配置示例代码

    总结,MyBatis-Plus的多数据源和动态数据源配置能够帮助开发者灵活地处理复杂的数据库环境,提高系统的可扩展性和可维护性。在实际项目中,正确配置和使用这些特性是提升系统性能和稳定性的重要一环。通过深入理解...

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

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

    springboot多数据源配置

    在Spring Boot应用中,多数据源配置是一项重要的技术实践,特别是在大型系统中,可能需要连接到多个数据库以实现数据隔离、读写分离或是分布式事务管理。Spring Boot以其强大的自动化配置能力,使得设置多数据源变得...

    Spring Boot使用spring-data-jpa配置Mysql多数据源

    # 主数据源配置 spring: datasource: primary: url: jdbc:mysql://localhost:3306/main_db?useSSL=false&serverTimezone=UTC username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver...

    通过Spring Boot配置动态数据源访问多个数据库的实现代码

    在Spring Boot项目中,数据源配置管理是通过DataSourceConfig类来实现的,该类中使用了@Configuration和@MapperScan注解,分别用于标注该类是一个配置类和扫描Mapper接口。DataSourceConfig类中定义了两个Bean,分别...

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

    在`mybatis-spring`的配置中,我们指定使用Spring的`SqlSessionFactoryBean`,并将数据源设置为我们的动态数据源。 ```xml &lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt; &lt;!...

    基于注解的Spring多数据源配置和使用

    ### 基于注解的Spring多数据源配置与使用详解 #### 一、引言 在企业级应用开发中,经常会遇到需要从多个数据库拉取数据的情况,比如进行跨库查询、定时任务中的数据分析及报表统计等。Spring框架作为Java开发领域的...

    spring 动态切换数据源

    - 如果使用Spring Boot,可以利用其自动配置功能,将数据源配置移到`application.properties`或`application.yml`中,并使用`@ConfigurationProperties`注解绑定配置。同时,可以使用`@Bean`注解创建动态数据源bean...

    spring mvc 配置多数据源

    # Oracle数据源配置 jdbc.driver=oracle.jdbc.OracleDriver jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:dev jdbc.username=ling jdbc.password=229 # MySQL数据源配置 jdbc-mysql.driver=com.mysql.jdbc.Driver ...

Global site tag (gtag.js) - Google Analytics