#yyds干货盘点#SpringBoot + MyBatis + MySQL 实现读写分离!

人生处万类,知识最为贤。这篇文章主要讲述#yyds干货盘点#SpringBoot + MyBatis + MySQL 实现读写分离!相关的知识,希望能为你提供帮助。
引言【#yyds干货盘点#SpringBoot + MyBatis + MySQL 实现读写分离!】读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP
然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。

AbstractRoutingDataSource基于特定的查找key路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。

实践maven依赖

< ?xml version="1.0" encoding="UTF-8"?>
< project xmlns="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>
< description> < /description>

< parent>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-starter-parent< /artifactId>
< version> 2.0.5.RELEASE< /version>
< relativePath/> < !-- lookup parent from repository -->
< /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>
< artifactId> commons-lang3< /artifactId>
< version> 3.8< /version>
< /dependency>

< dependency>
< groupId> mysql< /groupId>
< artifactId> mysql-connector-java< /artifactId>
< scope> runtime< /scope>
< /dependency>
< dependency>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-starter-test< /artifactId>
< scope> test< /scope>
< /dependency>
< /dependencies>

< build>
< plugins>
< plugin>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-maven-plugin< /artifactId>
< /plugin>


< !--< plugin>
< groupId> org.mybatis.generator< /groupId>
< artifactId> mybatis-generator-maven-plugin< /artifactId>
< version> 1.3.5< /version>
< dependencies>
< dependency>
< groupId> mysql< /groupId>
< artifactId> mysql-connector-java< /artifactId>
< version> 5.1.46< /version>
< /dependency>
< /dependencies>
< configuration>
< configurationFile> $basedir/src/main/resources/myBatisGeneratorConfig.xml< /configurationFile>
< overwrite> true< /overwrite>
< /configuration>
< executions>
< execution>
< id> Generate MyBatis Artifacts< /id>
< goals>
< goal> generate< /goal>
< /goals>
< /execution>
< /executions>
< /plugin> -->

< /plugins>
< /build>
< /project>

数据源配置
application.yml
spring:
datasource:

    推荐阅读