最近公司打算使用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
如果有不對的地方,還希望同學們給出意見和建議。
