Java:(⼀)⾃⼰动⼿实现⼀个好⽤的SpringBoot后端框架(项⽬搭建、组件
依赖)
前⾔
这次准备分享⼀篇教程:如何⾃⼰动⼿实现⼀个好⽤的后端框架,我会尽量使⽤循序渐进的⽅式,从项⽬搭建开始,到集成各种组件,到最后架构完成,并集成基础的⽤户体系,⼀步步说明如何搭建⼀个属于⾃⼰的后端框架。
基于现在⼤部分项⽬都是前后端分离的形式,因此本项⽬也是⼀个纯后端的架构,基于循序渐进的原则,我打算先以 单体项⽬的形式⼊⼿,先说明如何⼀步步集成各种组件,到最后形成⼀个完整的架构,后续有空的话,我会再以微服务的形式更新⼀篇教程。
限于我的技术⽔平也有限,抱着⼀起学习、共同进步的⼼态,在下⽂的分享过程中,如有发现问题,还请各位能及时帮忙指正,如有好的建议或者⽅案也请不吝赐教,希望⼤家能共同进步
本教程的技术选型
⽤到的主要组件及说明(包括但不限于以下列表)
组件说明
项⽬基础架构,集成了基本了框架能⼒
数据连接池,提供了数据库连接池、监控等能⼒
持久层组件
Json Web Token,前后端分离时作为前端每次请求后台接⼝的凭证
RSA⾮对称加密算法,JWT token加密需时要⽤到
ELK中的E,提供⼤数据量全⽂检索能⼒
⾼速缓存组件
提供⾃动⽣成API接⼝⽂档能⼒
还有⼀些组件如guava、kaptcha、lombok、minio等,在项⽬中我会尽量予以注释说明
如果有需要⽤到Excel处理组件,可以选择使⽤现成组件,如EasyExcel,或者参考下我的另⼀篇⽂章⾃⼰⼿动写⼀个
本项⽬JDK版本使⽤是的1.8+
本教程适合哪些读者
有⼀定的Java独⽴开发能⼒,⾄少有使⽤SpringBoot搭建并运⾏过项⽬的经验,其它的组件我感觉都是现学现卖,有不懂的也没关系,先看明⽩怎么⽤,后⾯⽤熟了后⾃⼰再去摸索。
限于篇幅,我打算分⼏篇⽂章来讲解,下⾯正式开始
正式开始
⼀、搭建项⽬
这⾥照顾⼀下新⼿同学,先说明⼀下如何搭建⼀个Maven项⽬(如果这块需要跳过,请直接电梯直达)
→→→→→
以IDEA为例,打开IDEA File New Project…Spring Initializer Next
填上项⽬的基础信息,继续Next
这⼀界⾯可以选择勾选⾃⼰想到集成的组件,这⾥我们先不勾,后⾯我们⾃⼰在POM⾥去集成,这⾥直接Next
填上项⽬的名称(Project Name)及项⽬存储位置(Project location)后直接点完成(Finish),完成后的Maven项⽬长这样
我们删掉⼀些⽆⽤的⽂件,只保留这些
⾄此,我们搭建出了⼀个空的Maven项⽬,下⾯我们先把基础的包结构建好,如下图
项⽬结构说明
包名说明
annotation存放各种⾃定义注解
config存放项⽬及组件配置
constants存放⾃定义常量或者枚举
controller存放各个模块的控制层
dto数据传输实体
elasticsearch存放es相关的代码(可选,需要⽤到es的话就建)
mapper dao层及其xml
model表映射实体
service服务层
utils存放各种⼯具类
⼆、准备组件依赖
我们打开l,来集成组件要⽤到依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"xsi="/2001/XMLSchema-instance"
schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
<groupId>com.yinchd</groupId>
<artifactId>web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>WebBoot</name>
<description>后端基础架构</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
&porting.outputEncoding>UTF-8</porting.outputEncoding>
<java.version>1.8</java.version>
<fastjson.version>1.2.75</fastjson.version>
<swagger.version>3.0.0</swagger.version>
<mybatis-plus.version>3.4.2</mybatis-plus.version>
<mybatis-plus-generator.version>3.4.1</mybatis-plus-generator.version>
<fastjson.version>1.2.60</fastjson.version>
<log4j.version>1.2.17</log4j.version>
<kaptcha.version>0.0.9</kaptcha.version>
<druid.version>1.2.5</druid.version>
<es.version>7.6.2</es.version>
<velocity-engine-core.version>2.0</velocity-engine-core.version>
</properties>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除掉内置 Tomcat -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--⾼性能web服务器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!-- JUnit-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>springboot结构
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- 配置引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- swagger3 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。