从零搭建Spring Boot脚手架(1):开篇以及技术选型

1. 前言
目前Spring Boot已经成为主流的Java Web开发框架,熟练掌握Spring Boot并能够根据业务来定制Spring Boot成为一个Java开发者的必备技巧,但是总是零零碎碎不够系统,所以萌生了从零搭建一个后端脚手架的想法。并把这个过程中的细节思路和之前的一些文章结合起来展现给大家,希望能够实实在在帮助学习Spring Boot的同学,当然能力有限如果有不足之处还请多多指教。
2. 面向的群体
首先,这个定位不是完全没有接触过Spring Boot的初学者,因为Spring Boot的简单入门并不是特别难,找一些其他大佬的入门教程学习一阵就可以很快的入门;而是面向具有Spring Boot的学习经验和不够熟练的同学们,同时提供一些可以开箱即用的解决方案到实际开发中。
3. 项目结构介绍
其实我不太喜欢那种相互依赖整了好几个模块,DAO、Service、Controller各搞一个层,然后层层依赖。对于单体项目来说这种结构把简单的事情复杂化了,容易导致依赖管理混乱。所以一般的简单项目我都建议采用下面的结构:

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 获取更多资讯
从零搭建Spring Boot脚手架(1):开篇以及技术选型的更多相关文章
- 从零搭建Spring Boot脚手架(2):增加通用的功能
1. 前言 今天开始搭建我们的kono Spring Boot脚手架,首先会集成Spring MVC并进行定制化以满足日常开发的需要,我们先做一些刚性的需求定制,后续再补充细节.如果你看了本文有什么问 ...
- 从零搭建Spring Boot脚手架(3):集成mybatis
1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文集成了一些基础的功能,比如统一返回体.统一异常处理.快速类型转换.参数校验等常用必备功能,并编写了一些单元测试进行验证,今天 ...
- 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文把国内最流行的ORM框架Mybatis也集成了进去.但是很多时候我们希望有一些开箱即用的通用Mapper来简化我们的开发.我 ...
- 从零搭建Spring Boot脚手架(7):整合OSS作为文件服务器
1. 前言 文件服务器是一个应用必要的组件之一.最早我搞过FTP,然后又用过FastDFS,接私活的时候我用MongoDB也凑合凑合.现如今时代不同了,开始流行起了OSS. Gitee: https: ...
- 从零搭建Spring Boot脚手架(7):Elasticsearch应该独立服务
1. Spring Data Elasticsearch Spring Data Elasticsearch是Spring Data项目的子项目,提供了Elasticsearch与Spring的集成. ...
- 从零搭建Spring Boot脚手架(6):整合Redis作为缓存
1. 前言 上一文我们整合了Mybatis Plus,今天我们会把缓存也集成进来.缓存是一个系统应用必备的一种功能,除了在减轻数据库的压力之外.还在存储一些短时效的数据场景中发挥着重大作用,比如存储用 ...
- 从零搭建Spring Boot脚手架(5):整合 Mybatis Plus
1. 前言 在上一文中我根据Mybatis中Mapper的生命周期手动实现了一个简单的通用Mapper功能,但是遗憾的是它缺乏实际生产的检验.因此我选择更加成熟的一个Mybatis开发增强包.它就是已 ...
- 使用IDEA搭建Spring Boot入门项目
简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...
- Spring Boot系列学习文章(一) -- Intellij IDEA 搭建Spring Boot项目
前言: 最近做的一个项目是用Spring Boot来做的,所以把工作中遇到的一些知识点.问题点整理一下,做成一系列学习文章,供后续学习Spring Boot的同仁们参考,我也是第一次接触Spring ...
随机推荐
- 【初学】Spring源码笔记之零:阅读源码
笔记要求 了解Java语言 了解Spring Framework的基础 会使用Maven 关于本笔记 起因 本职数据分析,为公司内部人员开发数据处理系统,使用了Python/Django+Bootst ...
- Django之模型的_meta属性
Python有反射机制,Django也不例外,也有很好的反射机制,每个Django模型都有一个属性_meta,_meta也有属性和方法,这些属性和方法反射出了模型的一些特性,如果_meta用的好的话, ...
- js获取url并截取相应的字段,js解决url获取中文字段乱码问题
相信url截取信息是一个很常用的小功能页面跳转传参的时候可以在A页面的url挂一些参数到B页面获取正常的页面传参都是以数字和英文为主正常情况下中文获取的时候是有乱码的所谓上有政策下有对策一个正常的ur ...
- 开源|如何开发一个高性能的redis cluster proxy?
文|曹佳俊 网易智慧企业资深服务端开发工程师 背 景 redis cluster简介 Redis cluster是redis官方提供集群方案,设计上采用非中心化的架构,节点之间通过gossip协 ...
- Interllij Idea 环境必要配置
必要设置:https://blog.csdn.net/weixin_43378248/article/details/84673406 1. @Autowired 取消错误提示 (1)选择file - ...
- Spring IoC深入理解
本文相关代码(来自官方源码spring-test模块)请参见spring-demysify org.springframework.mylearntest包下. 三种注入方式 1.构造方法注入 pub ...
- 设计模式:state模式
核心: 把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化 例子: class State //状态接口 { public: virtual void show() = 0; ...
- [spring] -- 设计模式篇
工厂模式 Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象. BeanFactory :延迟注入(使用到某个 bean 的时候才 ...
- 感知机算法(PLA)代码实现
目录 1. 引言 2. 载入库和数据处理 3. 感知机的原始形式 4. 感知机的对偶形式 5. 多分类情况-one vs. rest 6. 多分类情况-one vs. one 7. sklearn实现 ...
- paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 ...