1. 前言

目前Spring Boot已经成为主流的Java Web开发框架,熟练掌握Spring Boot并能够根据业务来定制Spring Boot成为一个Java开发者的必备技巧,但是总是零零碎碎不够系统,所以萌生了从零搭建一个后端脚手架的想法。并把这个过程中的细节思路和之前的一些文章结合起来展现给大家,希望能够实实在在帮助学习Spring Boot的同学,当然能力有限如果有不足之处还请多多指教。

2. 面向的群体

首先,这个定位不是完全没有接触过Spring Boot的初学者,因为Spring Boot的简单入门并不是特别难,找一些其他大佬的入门教程学习一阵就可以很快的入门;而是面向具有Spring Boot的学习经验和不够熟练的同学们,同时提供一些可以开箱即用的解决方案到实际开发中。

3. 项目结构介绍

其实我不太喜欢那种相互依赖整了好几个模块,DAOServiceController各搞一个层,然后层层依赖。对于单体项目来说这种结构把简单的事情复杂化了,容易导致依赖管理混乱。所以一般的简单项目我都建议采用下面的结构:

kono-dependencies是一个依赖版本管理的模块,负责kono-app所有的依赖版本、依赖选型的管理。原则上kono-app所有的依赖都应该来自kono-dependencies而且版本从kono-dependencies继承,这样能做到依赖版本的集中控制,使得技术选型和兼容性得到保证。

Maven为例,kono-dependencies只会包含一个pom.xml,而且打包方式packaging只能是pom。所有的依赖都被dependencyManagement管理。

<groupId>cn.felord</groupId>
<artifactId>kono-dependencies</artifactId>
<version>1.0.0.RELEASE</version>
<!--打包方式-->
<packaging>pom</packaging> <dependencyManagement>
<!--被管理的依赖-->
</dependencyManagement>

这里有一个小技巧,我们把Spring Boot的父依赖加入管理,就等于把项目的Spring Boot所有的官方starter纳入了管理:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 其它依赖 -->
</dependencies>
</dependencyManagement>

当然如果有业务需要可以分更多的模块,但是依赖管理一定要清晰、可控。

4. 版本号

版本号的规则也是很有学问的。这里我选用了最容易理解的方式,也是Spring Boot采用的版本号命名风格。

  • Major 主版本号,当有非兼容性的变更时,递增主版本号。

  • Minor 次版本号,当以可向后兼容的方式增加了功能时,递增次的版本号。

  • Patch 补丁版本号,当有向后兼容的bug修复时,递增补丁版本号。

  • Label 标记,用来区分开发版、快照版、里程碑版、正式发行版。

5. 技术选型

以下都是Java技术栈特定场景下的常用选择:

  • springboot 基础整合框架
  • servlet4 web 标准
  • undertow 或者tomcat web 容器
  • spring cache 缓存抽象层
  • spring security 安全框架
  • json web token 安全框架token技术
  • mybatis plus 3 ORM增强
  • spring data jpa (选)
  • redis 缓存中间件
  • mysql 数据库
  • mapstruct bean转换器,编译期使用
  • lombok bean简化工具
  • swagger2 文档(开发测试)
  • docker 容器技术

在一开始,这里面的一些技术并不会集成进去,随着迭代会在合适的时机加入它们,甚至会加入这里面没有的技术栈。

6. 最后

通过从零搭建脚手架的过程您可以循序渐进的学到如何整合一些功能到项目中,同时还能看到一些实际开发中才能遇到的一些问题以及解决这些问题的思路。同时如果在这个过程中您有好的建议和问题也可以和我进行沟通,感谢持续关注,共同提高。

关注公众号:Felordcn 获取更多资讯

个人博客:https://felord.cn

从零搭建Spring Boot脚手架(1):开篇以及技术选型的更多相关文章

  1. 从零搭建Spring Boot脚手架(2):增加通用的功能

    1. 前言 今天开始搭建我们的kono Spring Boot脚手架,首先会集成Spring MVC并进行定制化以满足日常开发的需要,我们先做一些刚性的需求定制,后续再补充细节.如果你看了本文有什么问 ...

  2. 从零搭建Spring Boot脚手架(3):集成mybatis

    1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文集成了一些基础的功能,比如统一返回体.统一异常处理.快速类型转换.参数校验等常用必备功能,并编写了一些单元测试进行验证,今天 ...

  3. 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper

    1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文把国内最流行的ORM框架Mybatis也集成了进去.但是很多时候我们希望有一些开箱即用的通用Mapper来简化我们的开发.我 ...

  4. 从零搭建Spring Boot脚手架(7):整合OSS作为文件服务器

    1. 前言 文件服务器是一个应用必要的组件之一.最早我搞过FTP,然后又用过FastDFS,接私活的时候我用MongoDB也凑合凑合.现如今时代不同了,开始流行起了OSS. Gitee: https: ...

  5. 从零搭建Spring Boot脚手架(7):Elasticsearch应该独立服务

    1. Spring Data Elasticsearch Spring Data Elasticsearch是Spring Data项目的子项目,提供了Elasticsearch与Spring的集成. ...

  6. 从零搭建Spring Boot脚手架(6):整合Redis作为缓存

    1. 前言 上一文我们整合了Mybatis Plus,今天我们会把缓存也集成进来.缓存是一个系统应用必备的一种功能,除了在减轻数据库的压力之外.还在存储一些短时效的数据场景中发挥着重大作用,比如存储用 ...

  7. 从零搭建Spring Boot脚手架(5):整合 Mybatis Plus

    1. 前言 在上一文中我根据Mybatis中Mapper的生命周期手动实现了一个简单的通用Mapper功能,但是遗憾的是它缺乏实际生产的检验.因此我选择更加成熟的一个Mybatis开发增强包.它就是已 ...

  8. 使用IDEA搭建Spring Boot入门项目

    简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...

  9. Spring Boot系列学习文章(一) -- Intellij IDEA 搭建Spring Boot项目

    前言: 最近做的一个项目是用Spring Boot来做的,所以把工作中遇到的一些知识点.问题点整理一下,做成一系列学习文章,供后续学习Spring Boot的同仁们参考,我也是第一次接触Spring ...

随机推荐

  1. 介绍下重绘和回流(Repaint & Reflow),以及如何进行优化

    1. 浏览器渲染机制 浏览器采用流式布局模型(Flow Based Layout) 浏览器会把HTML解析成DOM,把CSS解析成CSSOM,DOM和CSSOM合并就产生了渲染树(Render Tre ...

  2. linux常用命令(自己感觉常用的)

    常用命令 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) shutdown -r 重启 -h 关机 reboot 重启 ...

  3. Scala 基础(十一):Scala 函数式编程(三)高级(一)偏函数、作为参数的函数、匿名函数、高阶函数

    1 偏函数 1)在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择 2)将包在大括号内的一组case语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范围值的 ...

  4. 数据可视化之DAX篇(十七)Power BI表格总计行错误的终极解决方案

    https://zhuanlan.zhihu.com/p/68183990 我在知识星球收到的问题中,关于表格和矩阵(以下统称表格)总计行错误算是常见的问题之一了,不少初学者甚为不解,在Excel透视 ...

  5. 【其他-小技巧-Uipath】VB语法操作DataTable分组并求和

    需要对DataTable分组求和的语法:VB.net 和C#中还有点不太一样.最后试了好多方法,要这么写 我的dataTabel数据: (From p In dataTabel.AsEnumerabl ...

  6. Python Ethical Hacking - WEB PENETRATION TESTING(2)

     CRAWING DIRECTORIES Directories/folders inside the web root. Can contain files or other directories ...

  7. T4 字符串的修改 题解

    有 A=a1a2a3„am,B=b1b2b3„bn 两个字符串(均为小写字母)现在要通过以下操作将 A 或 A 的一个后缀修改为 B: 1. 删除 删除掉 A 中的某一个字符. 2. 添加 将某一个字 ...

  8. ASP.NET CORE之中间件-自定义异常中间件

    参考资料:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1 1.一般A ...

  9. eclipse导入项目出现红叉

    转载:原博客 导入web项目有红叉时可能是path环境不支持需要配置自己电脑的path,所以需要build path 出现java代码错误或者…jsp文件出错(https://img-blog.csd ...

  10. [redis] -- 过期策略篇

    过期处理 定期删除 redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除 惰性删除 定期删除可能会导致很多过期 key 到了时间并没有被删除掉.所以就 ...