原标题:SpringBoot+MyBatis+MySQL读写分离(实例)
作者:狂乱的贵公子
1. 引言
读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP。
然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。
2. AbstractRoutingDataSource
基于特定的查找key路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。
3. 实践
关于配置请参考:
3.1. maven依赖
< projectxmlns= "http://maven.apache.org/POM/4.0.0"xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
< modelVersion>4.0.0 modelVersion>
< groupId>com.cjs.example groupId>
< artifactId>cjs-datasource-demo artifactId>
< version>0.0.1-SNAPSHOT version>
< packaging>jar packaging>
< name>cjs-datasource-demo name>
< deion> deion>
< parent>
< groupId>org.springframework.boot groupId>
< artifactId>spring-boot-starter-parent artifactId>
< version>2.0.5.RELEASE version>
< relativePath/>
parent>
< properties>
< project.build.sourceEncoding>UTF-8 project.build.sourceEncoding>
< project.reporting.outputEncoding>UTF-8 project.reporting.outputEncoding>
< java.version>1.8 java.version>
properties>
< dependencies>
< dependency>
< groupId>org.springframework.boot groupId>
< artifactId>spring-boot-starter-aop artifactId>
dependency>
< dependency>
< groupId>org.springframework.boot groupId>
< artifactId>spring-boot-starter-jdbc artifactId>
dependency>
< dependency>
< groupId>org.springframework.boot groupId>
< artifactId>spring-boot-starter-web artifactId>
dependency>
< dependency>
< groupId>org.mybatis.spring.boot groupId>
< artifactId>mybatis-spring-boot-starter artifactId>
< version>1.3.2 version>
dependency>
< dependency>
< groupId>org.apache.commons groupId>