• Spring Boot2从入门到实战:整合Web项目常用功能


    在Web应用开发过程中,一般都涵盖一些常用功能的实现,如数据库访问、异常处理、消息队列、缓存服务、OSS服务,以及接口日志配置,接口文档生成等。如果每个项目都来一套,则既费力又难以维护。可以通过Spring Boot的Starter来将这些常用功能进行整合与集中维护,以达到开箱即用的目的。

    项目基于Spring Boot 2.1.5.RELEASE 版。
    项目地址: https://github.com/ronwxy/base-spring-boot

    整个项目分为如下几部分:

    • 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系列博文中,将一一详细介绍各功能的整合集成与应用。同时会不断更新与完善,以达到能直接用于生产项目的水平。



    Spring Boot入门到实战汇总:https://www.cnblogs.com/spec-dog/p/11062994.html

     


    我的个人博客地址:http://blog.jboost.cn
    我的头条空间: https://www.toutiao.com/c/user/5833678517/#mid=1636101215791112
    我的github地址:https://github.com/ronwxy
    我的微信公众号:jboost-ksxy

    —————————————————————————————————————————————————

    微信公众号
    欢迎关注我的微信公众号,及时获取最新分享

  • 相关阅读:
    深入浅出 Redis client/server 交互流程
    VMware三种网络连接模式(转载)
    ARP 原理及攻击
    symbol lookup error:undefined symbol
    printf 颜色格式串"33[34;1m"
    运行openvas
    openvas 安装
    升级openssl 支持TLS1.2
    Windows登录密码明文获取器
    Linux字符串截取和处理命令 cut、printf、awk、sed、sort、wc
  • 原文地址:https://www.cnblogs.com/spec-dog/p/11063151.html
Copyright © 2020-2023  润新知