spring+druid实现基于注解的多数据源切换

本文介绍了Spring结合Druid如何实现多数据源的静态和动态切换。静态切换需要为每个数据源配置单独的SessionFactory,而动态切换则可以在运行时根据需要切换数据源。文章详细讲解了如何配置数据源,使用AbstractRoutingDataSource子类以及ThreadLocal确保线程安全。此外,还展示了如何通过注解和Spring AOP实现数据源的动态切换,确保切换操作在事务开始之前执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据源可以切换分为静态切换和动态切换两种,静态切换即在代码中配置多个数据源,然后为每个数据源写一套对应的sessionFactory和dao层,这样做的缺点是,在添加新的数据源时还要为新的数据源添加一个SessionFactory。使用动态切换我们只需要配置多个数据源,对应一套sessionFactory,根据需要在业务代码中实现数据源之间的动态切换。

需要注意的是spring的事务管理是基于数据源的,所以如果要实现动态数据源切换,而且在同一个数据源中保证事务起作用的话,就需要注意二者的顺序问题,即:在事务起作用之前就要把数据源切换回来,所以我们在对数据源进行切换操作的时候最好在Controller层进行(因为一般事务的操作在service层,但缺点是涉及到需要使用两个以上数据源中的数据完成的业务时就会使controller层会涉及到一些不必要的业务代码了),如果在service层进行数据源的切换,要在spring事务的aop之前添加。

手动切换数据源的方式

首先编写数据库配置文件:jdbc.properties
然后管理数据源配置:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>classpath:datasource.properties</value>
        </property>
    </bean>

    <bean id="baseConfig" class="com.alibaba.druid.pool.DruidDataSource" abstract="true">
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <property name="maxActive" value="20"/>
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000"/>
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000"/>
        <property name="validationQuery" value="SELECT 'x'"/>
        <property nam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值