文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring Boot + MyBatis + MySQL 实现读写分离!

2024-12-14 00:43

关注

因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP

然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。

2、AbstractRoutingDataSource

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

3、实践

3.1. maven依赖 

  1. xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  4.     <modelVersion>4.0.0modelVersion>  
  5.     <groupId>com.cjs.examplegroupId>  
  6.     <artifactId>cjs-datasource-demoartifactId>  
  7.     <version>0.0.1-SNAPSHOTversion>  
  8.     <packaging>jarpackaging>  
  9.     <name>cjs-datasource-demoname>  
  10.     <description>description>  
  11.     <parent>  
  12.         <groupId>org.springframework.bootgroupId>  
  13.         <artifactId>spring-boot-starter-parentartifactId>  
  14.         <version>2.0.5.RELEASEversion>  
  15.         <relativePath/>   
  16.     parent>  
  17.     <properties>  
  18.         <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>  
  19.         <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>  
  20.         <java.version>1.8java.version>  
  21.     properties>  
  22.     <dependencies>  
  23.         <dependency>  
  24.             <groupId>org.springframework.bootgroupId>  
  25.             <artifactId>spring-boot-starter-aopartifactId>  
  26.         dependency>  
  27.         <dependency>  
  28.             <groupId>org.springframework.bootgroupId>  
  29.             <artifactId>spring-boot-starter-jdbcartifactId>  
  30.         dependency>  
  31.         <dependency>  
  32.             <groupId>org.springframework.bootgroupId>  
  33.             <artifactId>spring-boot-starter-webartifactId>  
  34.         dependency>  
  35.         <dependency>  
  36.             <groupId>org.mybatis.spring.bootgroupId>  
  37.             <artifactId>mybatis-spring-boot-starterartifactId>  
  38.             <version>1.3.2version>  
  39.         dependency>  
  40.         <dependency>  
  41.             <groupId>org.apache.commonsgroupId>  
  42.             <artifactId>commons-lang3artifactId>  
  43.             <version>3.8version>  
  44.         dependency>  
  45.         <dependency>  
  46.             <groupId>mysqlgroupId>  
  47.             <artifactId>mysql-connector-javaartifactId>  
  48.             <scope>runtimescope>  
  49.         dependency>  
  50.         <dependency>  
  51.             <groupId>org.springframework.bootgroupId>  
  52.             <artifactId>spring-boot-starter-testartifactId>  
  53.             <scope>testscope>  
  54.         dependency>  
  55.     dependencies>  
  56.     <build>  
  57.         <plugins>  
  58.             <plugin>  
  59.                 <groupId>org.springframework.bootgroupId>  
  60.                 <artifactId>spring-boot-maven-pluginartifactId>  
  61.             plugin>  
  62.