• SpringBoot自定义场景启动器(starter)


    有时候,springboot官方提供的场景启动器(starter)并不能很好的满足我们的需求。

    一些配置类仍然需要我们自行编写(例如mybatis plus的分页插件配置),在多模块项目中,这种模式代码可能多个模块都需要编写一次,这时候,我们可以考虑自行编写场景启动器,然后在common模块引入即可。

    命名规约

    spring官方:

    spring-boot-starter-xxx

    自定义:

    xxx-spring--boot-starter

    自定义starter步骤

    创建一个普通的空工程

    image-20201102191429180 image-20201102191054956

    创建一个普通maven项目

    image-20201102191133308

    这里我将工程命名为gulimall-spring-boot-starter

    image-20201102191218677

    创建自动配置模块

    选择springboot工程构建工具:

    image-20201102191630129

    模块命名为gulimall-spring-boot-autoconfigure。

    image-20201102191817768

    这里可以啥都不选,后面可以自行修改

    image-20201102192006045

    修改pom文件

    starter引入autoconfigure模块

    image-20201102192207127

    autoconfigure模块,先删除build,然后删除spring-boot-test,再删除test包,因为用不到,我这里引入mybatis-plus的starter。

    image-20201102192845483

    编写配置类

    先删除主启动类,然后新建一个配置类

    /**
     * mybatis plus分页插件配置
     * @author wj
     */
    @ConditionalOnClass(value = {PaginationInterceptor.class})
    @EnableTransactionManagement
    @Configuration
    public class MybatisPlusConfig {
        @Bean
        public PaginationInterceptor paginationInterceptor(){
            return new PaginationInterceptor();
        }
    }
    

    配置进META-INFspring.factories:

    # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
      com.wj.gulimall.autoconfigure.config.MybatisPlusConfig
    

    image-20201102193919978

    这样,项目在启动的时候,会见该自动配置类进行扫描。

    打包到本地仓库

    先打包autoconfigure模块:

    双击install

    image-20201102194222300 image-20201102194251103

    构建成功后,再同样步骤,构建starter模块

    自定义场景启动的测试

    构建成功后,我们就可以再其他项目中的公用模块引入自定义starter:

    image-20201102194600801

    而我写的分页插件配置仍然生效。

    image-20201102195537124

    后台日志也打印出分页查询的sql

    image-20201102195606998

    我这里日志打印使用了p6spy,当然p6spy的全局配置也可以写入自定义的starter中(这里不再赘述)

    我们也可以在不要配置数据源的模块中,直接排除mybatis-plus的依赖也不会报错,因为我们在配置类上加上了@ConditionalOnClass(value = {PaginationInterceptor.class}),只有当PaginationInterceptor.class在类路径上存在,才实例化当前Bean。

    image-20201102195048711
  • 相关阅读:
    数学学习合集
    萌萌的网络流~~
    2014西安全国邀请赛
    好题、趣题、麻烦题
    单调栈与单调队列
    字符串习题
    计算几何
    summer 2014 校队训练 嗷嗷待补之题
    2014多校联合训练第一场(组队训练)
    summer 2014 Round 4 解题报告
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13916169.html
Copyright © 2020-2023  润新知