只是编写完这个方法是没用的,我们还需要在mybaties-config.xml配置文件中,配置上我们实现的拦截器,如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置全局属性 --> <settings> <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 --> <setting value="true" /> <!-- 使用列别名替换列名 默认:true --> <setting value="true" /> <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} --> <setting value="true" /> <!-- 打印查询语句 --> <setting value="STDOUT_LOGGING" /> </settings> <plugins> <plugin interceptor="cn.reminis.o2o.dao.split.DynamicDataSourceInterceptor" /> </plugins> </configuration> 配置多数据源将原来配置dataSource的bean,改为abstractDatasource,并增加主库数据源和从库数据源的配置,如下:
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <!-- 配置整合mybatis过程 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 2.数据库连接池 --> <bean abstract="true" destroy-method="close"> <!-- 配置连接池属性 --> <!-- <property value="${jdbc.driver}" /> <property value="${jdbc.url}" /> <property value="${jdbc.username}" /> <property value="${jdbc.password}" /> --> <!-- c3p0连接池的私有属性 --> <property value="30" /> <property value="10" /> <!-- 关闭连接后不自动commit --> <property value="false" /> <!-- 获取连接超时时间 --> <property value="10000" /> <!-- 当获取连接失败重试次数 --> <property value="2" /> </bean> <!--主库的数据源配置--> <bean parent="abstractDataSource"> <property value="${jdbc.master.driver}" /> <property value="${jdbc.master.url}" /> <property value="${jdbc.master.username}" /> <property value="${jdbc.master.password}" /> </bean> <!--从库的数据源配置--> <bean parent="abstractDataSource"> <property value="${jdbc.slave.driver}" /> <property value="${jdbc.slave.url}" /> <property value="${jdbc.slave.username}" /> <property value="${jdbc.slave.password}" /> </bean> <!--配置动态数据源。这里targetDataSource就是路由数据源的名称--> <bean> <property> <map> <entry value-ref="master" key="master"></entry> <entry value-ref="slave" key="slave"></entry> </map> </property> </bean> <!--懒加载,因为数据源是程序运行时决定的--> <bean> <property> <ref bean="dynamicDataSource" /> </property> </bean> <!-- 3.配置SqlSessionFactory对象 --> <bean> <!-- 注入数据库连接池 --> <property ref="dataSource" /> <!-- 配置MyBaties全局配置文件:mybatis-config.xml --> <property value="classpath:mybatis-config.xml" /> <!-- 扫描entity包 使用别名 --> <property value="cn.reminis.o2o.entity" /> <!-- 扫描sql配置文件:mapper需要的xml文件 --> <property value="classpath:mapper/*.xml" /> </bean> <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 --> <bean> <!-- 注入sqlSessionFactory --> <property value="sqlSessionFactory" /> <!-- 给出需要扫描Dao接口包 --> <property value="cn.reminis.o2o.dao" /> </bean> </beans>我们在jdbc.properties配置文件中,配置主从库数据源的地址:
## 主库数据源配置 jdbc.master.driver=com.mysql.jdbc.Driver jdbc.master.url=jdbc:mysql://192.168.0.188:3306/o2o?useUnicode=true&characterEncoding=utf8 jdbc.master.username=root jdbc.master.password=123456 ## 从库数据源配置 jdbc.slave.driver=com.mysql.jdbc.Driver jdbc.slave.url=jdbc:mysql://192.168.0.152:3306/o2o?useUnicode=true&characterEncoding=utf8 jdbc.slave.username=root jdbc.slave.password=root 测试 我们在执行查询操作时,就会从从库中去查询,我们可以通过查看日志的知,如下:
当我们执行增删改操作时,就会使用从库的数据源,如下: