关于这个demo工程
开发springboot应用的时候,经常用到redis、mybatis、restTemplate这些技术,在此将常用代码和配置都整理出来,以后有需要就能直接拿来用了;
demo的功能简介
此demo是个父子结构的maven工程,两个子工程特点如下:
整个服务如下图所示:
- 写操作:用户通过浏览器向service-a发起请求,通过service-a将数据写入mysql,然后service-a会调用service-b的接口,将数据写入redis;
- 读操作:用户通过浏览器向service-a发起请求,service-a会调用service-b的接口从redis中取数据,如果取到了就返回给浏览器,如果取不到,就从mysql中取,如果从mysql中能取到,就先通过service-b写入redis,再返回给浏览器,如果mysql中也没有,就返回无数据;
版本信息参考
- 操作系统:CentOS Linux release 7.7.1908
- docker:Community 19.03.2
- springboot:2.0.5.RELEASE
- mysql:5.7.27
- redis:5.0.6
demo源码下载
如果您不想编码,可以直接从GitHub下载完整的demo工程源码,地址和链接信息如下表所示:
项目主页 https:// github.com/zq2599/blog_ demos
该项目在GitHub上的主页
git仓库地址
(https) https:// github.com/zq2599/blog_ demos.git
该项目源码的仓库地址,https协议
git仓库地址(ssh)
git@github.com:zq2599/blog_demos.git
该项目源码的仓库地址,ssh协议
这个git项目中有多个文件夹,本章的应用在pinpoint185demo文件夹下,如下图红框所示:
快速部署mysql
- 为了快速准备好mysql服务用来测试,我这里是用docker来完成的,一行命令即可:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=888888 -idt mysql:5.7.27
- 创建数据库demo和表student,表结构非常简单:
CREATE DATABASE demo;
USE demo;
CREATE TABLE student (id INT(11), name VARCHAR(128));
快速部署redis
为了快速准备好redis服务用来测试,我这里是用docker来完成的,一行命令即可:
docker run --name redis -p 6379:6379 -idt redis:5.0.6 redis-server --appendonly yes
父工程
- 首先创建名为pinpoint185demo的maven工程,pom.xml内容如下:
<?
子工程service-a编码
- 在此工程下创建子工程service-a,其pom.xml内容如下:
<?
以上内容有几点需要注意:
a. 要提供web服务,所以依赖了spring-boot-starter-web;
b. 要使用mybaits,所以依赖了mybatis-spring-boot-starter;
c. 要连接mysql,所以依赖了mysql-connector-java;
d. commons-lang3、fastjson作为工具类,在代码中会用到它们的API;
- service-a的系统配置application.yml内容如下,注意数据库和mybaits的配置:
server:
- mybatis的mapping文件在srcmainresourcesmapping目录,名为StudentMapping.xml,对应student表的定义和操作:
<?
- student表对应的实体类:
package
- student对应的mapper接口:
package
- 由于要用到restTemplate访问service-b,因此要增加对应的配置类:
package
- 接下来是提供web服务的controller:
package
- 整个应用的启动类,增加了MapperScan注解:
package
以上就是service-a的全部源码了,包括mybatis和restTmeplate操作;
service-b源码
- 创建名为service-b的子工程,pom.xml如下,要注意的是依赖了spring-boot-starter-data-redis和commons-pool2:
<?
- 应用的配置文件application.properties内容如下:
server
- redis的配置类:
package
- redis的工具类:
package
- 保存student数据的实体类:
package
- 提供http服务的controller类:
package
- 最后是应用启动类:
package
以上就是整个demo的所有代码,接下来验证服务
验证
1、先调用service-a的add接口写数据:http://localhost:8080/add/1/tom :
2、检查数据库,写入成功:
mysql> select * from student;
+------+------+
| id | name |
+------+------+
| 1 | tom |
+------+------+
1 row in set (0.00 sec)
3、检查redis,写入成功(注意:千万不要在生产环境使用keys命令!!!):
127.0.0.1:6379> keys *
1) "student:1"
127.0.0.1:6379> get "student:1"
"["com.example.serviceb.entity.Student",{"id":1,"name":"tom"}]"
4、等待超过30秒,调用读接口试试:http://localhost:8080/get/1 ,由于redis中的数据只有30秒有效期,所以此时页面提示数据来自mysql
5、立即再调用读接口,由于前面的一次读接口会将数据写入redis,所以此时页面提示数据来自redis:
至此,整个demo已经完成开发和验证,希望你在着手开发一个数据、缓存相关的springboot应用时,此demo能给你提供一些参考。
参考并致谢
本文的源码中,RedisConfig和RedisUtil这两个类参考了这篇文章的代码:https://www.jianshu.com/p/b9154316227e ,在此致谢作者;
原作者:程序员欣宸
原文链接:立即可用的实战源码(springboot+redis+mybatis+restTemplate)
原出处:公众号
侵删