最近公司打算使用 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
如果有不对的地方, 还希望同学们给出意见和建议.
来源: https://www.cnblogs.com/huangqingshi/p/8847182.html