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

瘢痂装饰
• 阅读 2171

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

1. 前言

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

2. 面向的群体

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

3. 项目结构介绍

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

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

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采用的版本号命名风格。

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

  • 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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
徐小夕 徐小夕
4年前
前端组件/库打包利器rollup使用与配置实战
目前主流的前端框架vue和react都采用rollup来打包,为了探索rollup的奥妙,接下来就让我们一步步来探索,并基于rollup搭建一个库打包脚手架,来发布自己的库和组件。(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/16cb1c297071015523fb08d9e0f
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
java一生之敌 java一生之敌
2年前
JVM的内存模型和优化方式
一、JVM的内存模型1.!图片(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/52b2220f04010eb329efbef966f9fa40.png)其中s0,s1为幸
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
JavaWeb 调用接口
JavaWeb 如何调用接口CreateTime2018年4月2日19:04:29Author:Marydon1.所需jar包!(https://oscimg.oschina.net/oscnet/0f139
从0到1搭建自己的脚手架(java后端) | 京东云技术团队
脚手架是一种基础设施工具,用于快速生成项目的框架代码和文件结构。它是一种标准化的开发工具,使开发人员能够在项目的早期阶段快速搭建出一个具备基本功能和结构的系统。