5-4代码层读写分离的实现B

本文介绍如何在MyBatis中配置动态数据源,包括使用插件拦截器实现读写分离,通过Spring配置主从数据源,并设置连接池属性。

mybatis-config.xml

  • 添加plugin
    <plugins>
            <plugin interceptor="com.o2o.dao.split.DynamicDataSourceInterceptor">
        </plugin>
    </plugins>


  • 添加日志-DynamicDataSourceInterceptor
  logger.debug("设置方法[{}] use[{}] Strategy,SqlCommandType [{}]..", ms.getId(), lookupKey,ms.getSqlCommandType().name());
  DynamicDataSourceHolder.setDbType(lookupKey);
        return invocations.proceed();


  • spring-dao:修改dataSource
        <!--abstract:就相当于声明为父数据源,子数据源能继承父数据源的属性-->
        <bean id="abstractDataSource" abstract="true"
        class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <!-- 配置连接池属性 -->

        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30" />
        <property name="minPoolSize" value="10" />
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="false" />
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="10000" />
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2" />
    </bean>
    <!--parent:声明父数据源是谁-->
    <bean id="master" parent="abstractDataSource">
        <property name="driverClass" value="${jdbc.driver}" />
        <!--这里修改为master.url,当然数据库连接文件也会添加相应信息 -->
        <property name="jdbcUrl" value="${jdbc.master.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    <bean id="slave" parent="abstractDataSource">
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.slave.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    <!-- 配置动态数据源,这儿的targetDataSources就是路由数据源所对应的名称,将这两个数据源信息传入编写的类里,(其实是传入编写的类的父类) -->
    <!--value-ref和数据源bean-id保持一致,key和编写类的lookupkey保持一致 -->
    <bean id="dynamicDataSource"
        class="com.o2o.dao.split.DynamicDataSource">
        <property name="targetDataSources">
            <map>
                <entry value-ref="master" key="master"></entry>
                <entry value-ref="slave" key="slave"></entry>
            </map>
        </property>
    </bean>
    <!-- 配置懒加载  -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
        <property name="targetDataSource">
            <ref bean="dynamicDataSource" />
        </property>
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值