搭建 springboot 2.0 mybatis 讀寫分離 配置區分不同環境


  最近公司打算使用springboot2.0, springboot支持HTTP/2,所以提前先搭建一下環境。網上很多都在springboot1.5實現的,所以還是有些差異的。接下來咱們一塊看一下。

  文章的主要思路:

  1.工程的結構。

  2.重要代碼說明。

  3.運行結果。

  4.總結。

  

  1) 我用的開發工具是Idea。工程的結構如下:

  

工程結構的每個部分的說明: 

  config:  用於配置動態數據源的配置,同時使用切面實現數據庫讀寫分離。同時使用ThreadLocal去維護當前線程該用讀鎖還是寫鎖。

  controller: 用於攔截請求,我在示例里邊使用的是rest的請求攔截。

  entity: 與數據庫對應的實體類。

  mapper: 與數據庫數據庫方法的對應

  service: 用於實現控制層到數據層的一個銜接,提供服務。

  還有一個啟動入口類。  

  resources下面的mapper文件夾是數據庫映射的xml文件。

  app-config.xml用於添加外部的bean等提前放置的xml文件。需要使用該類時需要加上注解:@ImportResource("classpath:app-config.xml")。

  application.yml是應用的配置文件。

  logback.xml用於日志輸出配置。

  mybatis-config.xml用於mybatis的一些配置內容。

  Testinit.sql用於創建表使用的。

  POM文件的包引入:

<?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.hqs.demo</groupId>
    <artifactId>springboot-mybatis-rw</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot2.0.1.RELEASE-mybatis-rw</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.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>
        <logback.version>1.1.7</logback.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--熱部署使用 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback.version}</version>
        </dependency>
    </dependencies>

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


</project>

  2)  這塊內容比較復雜的點應該就是讀寫庫的切換:

    通過在DataSourceConfig.java里邊讀取主庫從庫:

   

   使用Spring切面編程來攔截需要更改數據庫的方法:

   

  根據配置的方法放到配置文件,可以將需要讀或寫的方法放到application.yml文件中:

read: get,select,count,list,query,find
write: add,create,update,delete,remove,insert

  3)運行結果:

  讀數據:

  

  數據庫采用read庫

  

  寫數據:

  

  使用寫庫:

  

  4)總結:

   1. 通過搭建springboot簡單了解到其原理,編寫很容易,運行也方便。

    2. 在搭建的過程中也參考了很多資料,非常感謝,牛人還是很多的。

    3. 本來打算用最新的druid-spring-boot-starter 1.1.9,但是沒找到太多的資料,所以沒有用。

    4. 放上git地址供參考 https://github.com/stonehqs/springboot2.0.1.RELEASE-mybatis-rw

如果有不對的地方,還希望同學們給出意見和建議。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM