spring Boot+Spring+Mybatis项目构建模板介绍和分享


创建一个新的项目,引入依赖包,建模块,复制粘贴各种模板,数据库配置等,想起来都是一件头疼的事,看了这篇文章,也许可以治你的头疼病。本次分享的是项目的构建过程和构建完成的项目模板分享。以后需要构建项目只要来复制一下就可以啦,超简单省事,你值的拥有。

1. IDEA创建一个maven项目

平时用的都是IntelliJ IDEA,具体创建项目流程,怎么去一通乱点,然后截图指导,这些就不做了,这个是作为一个开发人员的必备技能。这种教程在度娘上一搜也是一堆。

模板项目包含以下几个模块:

  • itcrud-api:这个模块是提供给外部访问的入口,也就是所谓Controller层
  • itcrud-service:服务层,核心业务代码集中地,也就是Service层
  • itcrud-dao:数据层,用于连接数据库,和数据库交互的部分,也就是Dao层
  • itcrud-common:整个项目共用组件存储的位置,如共用的常量类、工具类、枚举类等等
  • itcrud-entity:这一层很多项目都是没有的,不单独出来也是没有问题的,但是个人喜欢分类清晰干净的项目。此模块用来存储VODTO的,DTO用来接受外部请求参数封装,VO用于给外部响应数据封装

模块介绍完,再说说里面包含的具体内容。

2. maven依赖

这个没啥说的,pom.xml引入即可,具体内容可以看pom.xml文件的内容。

3. 数据库、redis、mapper的配置

  • 数据库mysql:在application.properties配置文件中配置数据库连接的相关信息,这里不需要设置连接池信息,因为pom.xml文件中已经引入了Druidspringboot的整合,使用默认配置就好。
  • Redis:基本百分之99.99%项目都会用到的非关系型数据库,用于缓存数据、session共享、分布式锁等,配置也是比较简单的,基本都是有默认值,配一下具体的host即可,如果你需要设置具体的连接数据,可以自己修改,在application.properties配置文件中已经把主要的几个参数列出来了。
  • mapperapplication.properties配置文件中指定mapper.xml文件的所在的位置,然后指定应用驼峰规则,其他配置都使用默认,需要特殊添加的加上即可。还有就是在Application启动类里面加上对具体mapper接口类的扫描。

4. 统一异常处理

itcrud-api里面创建了一个ItcrudExceptionHandler类,用Spring自带的Controller切面工具(@ControllerAdvice注解),对异常进行处理。具体处理逻辑参照具体的代码。

5. 请求出参入参和业务处理时间的日志输出

利用Spring的面向切面编程思想,对所有的Controller进行切入,采用around方式,获取请求的参数和将会响应的数据,并记录业务处理的时间,最后将结果输出到日志文件中或者控制台中。注意里面是将输出日志的操作放在finally代码块里面,防止代码异常导致日志信息不能正常输入问题。

此切面没有做日志信息脱敏操作,如果需要脱敏可以参考之前的文章:项目中手机、姓名、身份证信息等在日志和响应数据中脱敏操作

6. 请求头requestId的使用

在这个模板项目中所有的请求都是要带上requestId参数,此参数是放在请求头里面,用于做日志的跟踪。思路就是在切面里面获取requestId,然后将requestId放到MDC中,在logback.xml文件中取出放到日志信息中,具体实现看之前的文章:logback新认识(二):logback之MDC日志跟踪、日志自定义效果

7. RedisUtils的封装

如果你自己的项目有一套Redis工具类的封装的话,模板项目里面的可以删掉不用,如果没有,不妨用一下,我自己封装的一些常用操作API。我自己博客系统里面是用的这个,自我感觉还不错😄。

8. 线程池创建

springboot本身是有自带的线程池,个人还是习惯创建自己的线程池。线程池的定义在ThreadPoolConfig类中,可以通过多个方法创建多个线程池。不过bean的名称需要改一下,毕竟都是交给Spring管理,不要因为bean名称冲突导致项目启动直接跪掉。

9. 总结

整个项目的架构:Spring+Springboot+mybatis+redis+mysql,最基础的架构技术选型。内部包含异常的统一处理、请求入参出参的日志输出、Redis的工具类、线程池的创建、MDC日志跟踪、logback的详细配置、数据库+redis+mapper的基本配置等。还有一个上面没有列出来的,就是ResponseVO类的定义,这个类用来做统一格式响应数据的封装,一个字:好用。

10. 源码

GitHub:https://github.com/itcrud/itcrud-temp


文章作者: 程序猿洞晓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 程序猿洞晓 !
评论
 上一篇
nginx基础学习(二):nginx的location内部属性的详细说明和介绍 nginx基础学习(二):nginx的location内部属性的详细说明和介绍
上一篇文章写的nginx的基础安装,以及nginx配置文件的整体结构。这篇文章将会一起来看一下nginx中的一个重要属性location,location是放在server里面的,用于匹配访问的域名后的path路径。location匹配的规则很复杂,内容也是非常多,这里只做简单的介绍。location的匹配规则有三种,分别是精准匹配……
2018-12-31
下一篇 
JWT学习(二):Json Web Token JWT的Java使用 (JJWT) JWT学习(二):Json Web Token JWT的Java使用 (JJWT)
JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSON Web令牌(JWTs)的库。JJWT是基于JWT、JWS、……
2018-12-27
  目录