最近公司打算使用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.0modelVersion> <groupId>com.hqs.demogroupId> <artifactId>springboot-mybatis-rwartifactId> <version>0.0.1-SNAPSHOTversion> <packaging>jarpackaging> <name>springboot2.0.1.RELEASE-mybatis-rwname> <description>Demo project for Spring Bootdescription> <parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.0.1.RELEASEversion> <relativePath/> parent> <properties> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding> <java.version>1.8java.version> <logback.version>1.1.7logback.version> properties> <dependencies> <dependency> <groupId>com.alibabagroupId> <artifactId>druidartifactId> <version>1.1.6version> dependency> <dependency> <groupId>org.apache.commonsgroupId> <artifactId>commons-lang3artifactId> <version>3.4version> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-aopartifactId> dependency> <dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> dependency> <dependency> <groupId>org.mybatis.spring.bootgroupId> <artifactId>mybatis-spring-boot-starterartifactId> <version>1.3.2version> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starterartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-devtoolsartifactId> <optional>trueoptional> dependency> <dependency> <groupId>com.jayway.jsonpathgroupId> <artifactId>json-pathartifactId> <scope>testscope> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId> <scope>testscope> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-configuration-processorartifactId> <optional>trueoptional> dependency> <dependency> <groupId>ch.qos.logbackgroupId> <artifactId>logback-classicartifactId> <version>${logback.version}version> dependency> <dependency> <groupId>ch.qos.logbackgroupId> <artifactId>logback-coreartifactId> <version>${logback.version}version> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> 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
如果有不对的地方,还希望同学们给出意见和建议。