项目作者: dengyulong

项目描述 :
基于Spring AOP和Mybatis实现的数据库读写分离
高级语言: Java
项目地址: git://github.com/dengyulong/okay-rwdb.git
创建时间: 2018-09-02T12:19:32Z
项目社区:https://github.com/dengyulong/okay-rwdb

开源协议:

下载


okay-rwdb

基于Spring AOP和Mybatis实现的数据库读写分离
多个从库支持随机路由和轮询路由

使用说明:
1、spring配置文件参考

  1. <bean id="masterDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  2. destroy-method="close">
  3. <property name="driverClass" value="${jdbc.driver}" ></property>
  4. <property name="jdbcUrl" value="${jdbc.url}" ></property>
  5. <property name="user" value="${jdbc.username}" ></property>
  6. <property name="password" value="${jdbc.password}" ></property>
  7. <property name="initialPoolSize" value="${pool.initialPoolSize}" ></property>
  8. <property name="minPoolSize" value="${pool.minPoolSize}" ></property>
  9. <property name="maxPoolSize" value="${pool.maxPoolSize}" ></property>
  10. <property name="maxIdleTime" value="${pool.maxIdleTime}" ></property>
  11. <property name="acquireIncrement" value="${pool.acquireIncrement}" ></property>
  12. <property name="checkoutTimeout" value="${pool.checkoutTimeout}" ></property>
  13. <property name="maxIdleTimeExcessConnections" value="${pool.maxIdleTimeExcessConnections}" ></property>
  14. </bean>
  15. <bean id="slave01DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  16. destroy-method="close">
  17. <property name="driverClass" value="${jdbc.driver}" ></property>
  18. <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/club?useUnicode=true&characterEncoding=UTF-8" ></property>
  19. <property name="user" value="${jdbc.username}" ></property>
  20. <property name="password" value="${jdbc.password}" ></property>
  21. <property name="initialPoolSize" value="${pool.initialPoolSize}" ></property>
  22. <property name="minPoolSize" value="${pool.minPoolSize}" ></property>
  23. <property name="maxPoolSize" value="${pool.maxPoolSize}" ></property>
  24. <property name="maxIdleTime" value="${pool.maxIdleTime}" ></property>
  25. <property name="acquireIncrement" value="${pool.acquireIncrement}" ></property>
  26. <property name="checkoutTimeout" value="${pool.checkoutTimeout}" ></property>
  27. <property name="maxIdleTimeExcessConnections" value="${pool.maxIdleTimeExcessConnections}" ></property>
  28. </bean>
  29. <bean id="dataSource" class="com.mycompany.club.datasource.RWDataSource">
  30. <!-- 配置主库 -->
  31. <property name="master" ref="masterDataSource"></property>
  32. <!-- 配置从库列表 -->
  33. <property name="slaves">
  34. <map key-type="java.lang.String">
  35. <entry key="slave01DataSource" value-ref="slave01DataSource"></entry>
  36. </map>
  37. </property>
  38. </bean>
  39. <!-- MyBatis配置 -->
  40. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  41. <property name="dataSource" ref="dataSource" ></property>
  42. <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
  43. <property name="typeAliasesPackage" value="com.mycompany.club.entity" ></property>
  44. <!-- 显式指定Mapper文件位置 -->
  45. <property name="mapperLocations" value="classpath:/mapper/*Mapper.xml"></property>
  46. <property name="plugins">
  47. <list>
  48. <!-- 插件会按照配置的从下往上的顺序执行 -->
  49. <bean class="com.mycompany.club.interceptor.RWInterceptor"></bean>
  50. </list>
  51. </property>
  52. </bean>
  53. <bean id="transactionManager" class="com.mycompany.club.datasource.RWTransactionManager">
  54. <property name="dataSource" ref="dataSource" ></property>
  55. </bean>
  56. <!-- 使用annotation定义事务 -->
  57. <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" ></tx:annotation-driven>
  58. <!-- 定义aspectj -->
  59. <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

2、
默认情况下,查询会从从库查询,修改、删除、插入会走主库;
可以在service方法上增加注解 @RWSource(DBType.SLAVE)来指定主库或从库;
如果service方法上有事务注解@Transactional则会走主库