基于Spring框架及其他热门框架搭建的Web服务快速开发手脚架
本项目已经整合了Web服务常用的框架,利用本项目可以快速搭建并启动Web服务
同时也不用关心大多的配置,本项目已经完成了许多必要的配置,可以把大多数的精力都放在业务开发上
对于项目中的每个配置、配置、功能点都有较为详细的注释用以说明,方便查看和学习
- 实现了与用户登陆、注册和删除功能,可以快速复用
- 实现了异常路由、自定义异常类和异常枚举类,可以通过枚举类快速构建异常响应
- 支持响应序列化,对返回的实体对象进行序列化处理,隐藏敏感数据
- 支持全局异常和全局响应的拦截和处理
- 支持多环境配置(开发环境/生产环境)
- Slf4j作为日志门面,Logback作为日志实现
- 整合Swagger3,自动生成API测试文档
- 整合Spring Security,可配置CSRF-Token来防御CSRF攻击
在前后端分离的开发形式,本项目也很好地支持后端服务的独立开发,基于Alibaba提供的FastJSON依赖,让数据完全以JSON格式来与前端进行交互
当你的项目以前后端分离的形式进行开发时,在使用本项目搭建后端服务时需要注意:
- 页面和静态资源都以在前端部署的,可删除resources下的静态资源目录static和模版资源目录templates
- 启用本项目提供的两个组件类来完善功能
- 全局异常响应类(返回数据为JSON格式)GlobalExceptionHandler
- Spring Security认证请求控制类(返回数据为JSON格式)JsonSecurityController
- 这两个类主要是为了支持在前后端分离后,补充在异常响应和Security认证时,以JSON来交互数据
- 删除或注释掉不需要的组件类
- 全局异常响应类(返回异常模版页面和异常信息)GlobalExceptionPageHandler
- 页面路由控制类(专门返回页面的Controller)page目录
- 不注释掉注册组件的注释或者删除不需要的组件类的话,启动可以正常启动,但在响应请求时可能会产生预期外的结果
你也可以选择克隆 branch server 来获取本项目支持前后端分离的版本
- 编码工具:IntelliJ IDEA
- Spring version : 2.7.1
- JDK version : 1.8.0
- Maven version:2.7.1
本项目理论上兼容多个版本的环境,但可能需要修改下配置文件,为避免出现难以定位的错误,建议使用推荐的环境和版本来使用本项目
依赖管理工具:Maven —— 依赖详见文件Pom.xml
- 安全认证 : Spring Security
- 视图层:Thymeleaf
- 缓存层:Redis
- 持久层
- 数据库映射:JPA
- 数据库连接:JDBC
- MySQL-Connector-Java
- 工具层
- JSON解析:alibaba - fastjson
- 数据构建:lombok
- API测试:spring fox - Swagger3
- 日志记录:logging
- 单元测试:spring - test
- config:配置信息层
- controller:路由控制层
- dao:数据访问层
- entity:实体类
- enumer:自定义枚举类
- exception:自定义异常类
- serializer:数据响应序列化
- service:数据服务层
- MoSpringApplication:工程启动类
- SpringBoot使用的是Slf4j作为日志门面,Logback
- Logback也能实现定制化,SpringBoot推荐将配置文件名称命名为
logback-spring.xml表示这是SpringBoot下Logback专用的配置 - 在本项目中,已在项目根目录创建
logback-spring.xml并实现了对Logback的定制化,可以按需修改文件
- Maven配置:pom.xml
- 全局配置:application.yml
- 开发环境配置:application-dev.yml
- 生产环境配置:application-prod.yml
本项目已支持了多环境配置,通过将Maven中的environment属性,传递给SpringBoot的配置文件,在构建时替换为对应的值:
spring:
profiles:
active: '@environment@' #注意YAML配置文件需要加单引号,否则会报错这样,根据我们Maven环境的切换,SpringBoot的配置文件也会进行对应的切换。 下面主要列举注释的配置内容
# resources/application.yml
server:
# 服务端口
port: 8080
servlet:
# JSON防止中文乱码
encoding:
force-response: true
# 为所有Controller添加统一访问前缀
context-path: /api
spring:
# 多环境配置
profiles:
# 从Maven配置中读取选择的环境变量(开发环境:dev/生产环境:prod)
active: '@environment@' # 注意YAML配置文件需要加单引号,否则会报错
# 持久层数据源配置
datasource:
url: 'jdbc:mysql://localhost:3306/{数据库名称}'
username: '{数据库用户名}'
password: {数据库密码}
driver-class-name: com.mysql.cj.jdbc.Driver
# 缓存层数据源配置
redis:
# Redis服务器地址
host: localhost
# 端口
port: 6379
# 使用几号数据库
database: 0
# JPA 配置
jpa:
# 打印SQL语句
show-sql: true
# 数据库操作模式
hibernate:
ddl-auto: update
open-in-view: true
# Spring MVC 配置
mvc:
# SpringBoot 2.6以上版本修改了路径匹配规则,但是Swagger3还不支持
# 这里换回之前的,不然启动会直接报错
pathmatch:
matching-strategy: ant_path_matcher
# 静态资源配置
static-path-pattern: /static/**
thymeleaf:
# 开发阶段,建议关闭thymeleaf的缓存
cache: false
# Swagger开关
springfox:
documentation:
swagger-ui:
enabled: false
# 解决因为日志等级为DEBUG时,启动项目报"CONDITIONS EVALUATION REPORT"的问题
logging:
level:
org:
springframework:
boot:
autoconfigure: error当SpringBoot项目编写完成之后,只需要点击Maven生命周期中的package即可,它会自动将其打包为可直接运行的Jar包,第一次打包可能会花费一些时间下载部分依赖的源码一起打包进Jar文件。
我们发现在打包的过程中还会完整的将项目跑一遍进行测试,如果我们不想测试直接打包,可以手动使用以下命令:
mvn package -DskipTests打包后,我们会直接得到一个名为mospring-0.0.1-SNAPSHOT.jar的文件,在文件目录打开控制台窗口,输入命令:
java -jar mospring-0.0.1-SNAPSHOT.jar输入后即可将SpringBoot项目运行在本地运行,如果手动关闭窗口会导致整个项目终止运行。