Spring Boot整合Web项目常用功能详解
作者:空山新雨 发布时间:2023-06-04 17:14:21
前言
在Web应用开发过程中,一般都涵盖一些常用功能的实现,如数据库访问、异常处理、消息队列、缓存服务、OSS服务,以及接口日志配置,接口文档生成等。如果每个项目都来一套,则既费力又难以维护。可以通过Spring Boot的Starter来将这些常用功能进行整合与集中维护,以达到开箱即用的目的。
项目基于Spring Boot 2.1.5.RELEASE 版。
项目地址
整个项目分为如下几部分:
spring-boot-autoconfigure: 具体的各功能实现,每个功能通过package的形式组织
spring-boot-commons: 一些公共的工具类或共享类
spring-boot-dependencies: 依赖的集中维护管理,集中管理各个依赖的版本号
spring-boot-parent: 提供一个基本的父项目,web服务项目可通过继承该项目创建
spring-boot-starters: 各功能的starter项目,引入相应starter即引入相应功能
spring-boot-dependencies 项目
该项目主要是对所有依赖进行集中定义。通过 dependencyManagement 对依赖进行声明,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>cn.jboost.springboot</groupId>
<artifactId>spring-boot-commons</artifactId>
<version>${base-spring-boot.version}</version>
</dependency>
...
</dependencies>
</dependencyManagement>
这样,所有依赖的版本可以集中统一管理,在其它地方引用的时候可以省去版本的声明,如
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<optional>true</optional>
</dependency>
spring-boot-autoconfigure 项目
该项目是各功能自动配置的具体实现,以package的形式进行组织,如 tkmapper 包下实现了通用Mapper的自动配置,error 包下实现了错误处理的自动配置, 等等。
该项目继承了spring-boot-dependencies, 在项目的 pom.xml 中,依赖部分声明类似于
<dependencies>
<!-- spring denpendencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<optional>true</optional>
</dependency>
...
</dependencies>
不需要再指定版本号。通过将optional设置为true,表示该依赖不会进行传递,即另外一个项目引用该项目时,optional的依赖不会被传递依赖过去。
在 resources/META-INF/spring.factories 文件中,声明了所有自动配置类, 如下
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.jboost.springboot.autoconfig.tkmapper.MapperAutoConfiguration,\
cn.jboost.springboot.autoconfig.aoplog.AopLoggerAutoConfiguration,\
cn.jboost.springboot.autoconfig.alimq.config.AliMQAutoConfiguration,\
cn.jboost.springboot.autoconfig.qiniu.QiniuAutoConfiguration,\
cn.jboost.springboot.autoconfig.swagger.Swagger2AutoConfiguration,\
cn.jboost.springboot.autoconfig.druid.DruidAutoConfiguration,\
cn.jboost.springboot.autoconfig.error.exception.ExceptionHandlerAutoConfiguration,\
cn.jboost.springboot.autoconfig.alimns.MnsAutoConfiguration,\
cn.jboost.springboot.autoconfig.redis.RedisClientAutoConfiguration,\
cn.jboost.springboot.autoconfig.web.CORSAutoConfiguration
spring-boot-starters 项目
该项目包含按功能划分的多个子项目,主要用来引入依赖以达到自动配置的依赖条件,使引入对应starter时,能让自动配置生效。如通用Mapper集成的 tkmapper-spring-boot-starter 依赖如下
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
</dependencies>
同时在 resources/META-INF/spring.provides 里声明了该starter的用途,这里可随意编写。
spring-boot-commons 项目
可将一些常用的工具类, 或共享类放到这个项目中。比如一些常量定义,加解密工具类等。
spring-boot-parent 项目
该项目将Web应用需要的一些常见功能整合进来,应用项目可继承该项目进行构建,从而直接引入相应的功能。
在接下来的spring boot系列博文中,将一一详细介绍各功能的整合集成与应用。同时会不断更新与完善,以达到能直接用于生产项目的水平。
来源:https://www.cnblogs.com/spec-dog/p/11063151.html


猜你喜欢
- Android WebView的使用方法 Android app打开H5页一般要实现如下需求:1、打开指定url网页
- 基本语法C#,又名Csharp,天朝喜欢叫C井。C#是一种面向对象的编程语言。在面向对象的程序设计方法中,程序有各种相互交互的对象组成。相同
- 前言代码库:https://gitee.com/leo825/springboot-learning-parents.git之前写过《Spr
- 本文实例讲述了C#同步网络时间的方法。分享给大家供大家参考。具体分析如下:客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以
- 一:@@的意思是以@标注的字符出,其中所有的符号均为字符串符号,没有什么特殊字符,如''什么的,均默认为字符串
- Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title.首先我们看一下习惯了
- 前言1、每一种要缓存的数据都是有对应的versionCode,通过versionCode请求网络获取是否需要更新 2、提前将要缓存的数据放入
- 一、背景当我们在drools中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function来调用呢
- 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码,具体内容如下①
- 一、前言 Android 中解决滑动的方案有2种:外部拦截法 和内部拦截法。 滑动冲突也存在2种场景: 横竖滑动冲突、同向滑动冲突。 所以我
- Math.abs()的实现源码通过三目运算符判断a是否小于0来实现/** * Returns the absolute valu
- 1. 基本数据类型(以int为例,其他类似):Controller代码:@RequestMapping("saysth.do&qu
- windows系统中的画板工具,有好几种画刷,C#中并没有直接对应可使用的类,只能自己研究。1.画刷原理根据本人对PS的相关功能细心分析,发
- 1.基本概念首先我们需要弄清楚几个概念:面向对象是什么、类是什么、对象又是什么?还是逐个来说1.1面向对象我们常说Java是面向对象的语言,
- 首先我们要做的就是先把IIS(Internet信息服务)打开,我用的是win8 的系统,所以这里以win8系统的操作来讲一、IIS的一些事先
- 重载,继承,重写和多态的区别:1)继承是子类获得父类的成员。2)重写是继承后重新实现父类的方法。 3)重载是在一个类里一系列参数不同名字相同
- 尽管在实际开发过程中,我们一般使用ORM框架来代替传统的JDBC,例如Hibernate或者iBatis,但JDBC是Java用来实现数据访
- 本文介绍了浅谈Java的两种多线程实现方式,分享给大家。具有如下:一、创建多线程的两种方式Java中,有两种方式可以创建多线程:1 通过继承
- 一、简单介绍翻看Spring的源码时,发现@Bean注解的源码上标注了Since: 3.0,也就是说,@Bean注解是Spring从3.0版
- 本文实例讲述了C#读写INI文件的方法。分享给大家供大家参考。具体如下:虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实