SpringBoot自定义starter开发详细步骤说明

一.starter工程创建

开发之前可以先看看第三方starter的格式,命名方式都是 第三方名称-spring-boot-starter
可以参考druid的开发模式,一个模块开发完,其实也可以分模块开发
在这里插入图片描述

创建一个springboot模块,模块名称就是starter名称,例如我这里的模块名称为ip_spring_boot_starter

项目整体结构,注意包名要和目标工程不一致,不然导入后,目标工程扫包会扫到一起,出现其他错误,IpProperties都自动装配上,报错出现不唯一的bean。

在这里插入图片描述

pom文件导入业务开发所需要的依赖坐标

二.starter工程业务开发

比如,我这次设计的业务是记录系统访客独立id访问次数,把开发的业务写到service中,业务开发根据目标工程的需要来编写,因人而异,这里不多说明。

1.数据记录的位置

在这里插入图片描述

2.功能的触发

比如,目标项目的方法需要实现该业务,就需要在方法中加入bean.业务方法()来调用,如果很多方法都需要实现该业务,不可能去每个方法里都加上这么一句代码。这里用拦截器实现,详情如下
在这里插入图片描述

这里我们拦截器的功能是定义好了,但是spring并没加载它,拦截器没有起作用,下面需要注册这个拦截器,在SpringMvcConfig中,做如下配置

知识点:加上注解@Configuration的配置类,@Bean创建的是代理对象,直接拿容器中已注入的bean,调用时不会再new一个新的bean

在这里插入图片描述

3.业务的参数配置

①输出频率:多久输出一次(默认10秒输出一次)
②数据特征:累计数据 / 阶段数据(默认为累计数据)
③数据格式:详细模式 / 极简模式 (默认为详细模式)
在这里插入图片描述

目标工程的yml配置文件中设置

在这里插入图片描述

ipProperties类上加上注解

在这里插入图片描述

至此ipProperties是获取到了配置的属性数据,但是还没有用到业务方法中,等于说给的属性值没起作用,接下来就要把ipProperties的配置属性值加到业务方法里,详细如下

在这里插入图片描述

4.yml配置中的自动提示

为了实现下图这种添加配置时自动提示的功能
在这里插入图片描述

业务工程的pom文件加入配置处理器的坐标
但是注意,要实现有提示功能,需要这个坐标,但是给目标工程使用时,install的时候,需要把这个坐标注释掉,因为这样jar包里有一组提示,文件里有一组提示,会出现两组提示

简单点吧,就是开发提示功能时导入这个坐标,开发完成后,install的时候,注释掉这个坐标就行了

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

在这里插入图片描述

配置文件中的提示信息都来自ipProperties类里写的注释,但是我们还想实现这种写到最后有可选模式,就需要在spring-configuration-metadata.json中添加点东西了,hints里默认是没有值的,我们需要添加可选的代码。

在这里插入图片描述

添加内容

  "hints": [
    {
      "name": "tools.ip.model",
      "values": [
        {
          "value": "detail",
          "description": "详细模式."
        },
        {
          "value": "simple",
          "description": "极简模式."
        }
      ]

在这里插入图片描述

三.自动配置方式加载配置类

这里照搬druid的自动配置文件,改一下即可,autoconfig包创建一个自动配置类,在自动配置类中加载业务类,将它定义成bean,可以直接@Import导入也可以使用@Bean。

在这里插入图片描述
在这里插入图片描述

自动配置类

在这里插入图片描述

最后效果是加载该业务模块时,会加载spring.factories文件,加载spring.factories时会根据spring.factories里的全路径类名加载autoconfig包下的自动配置类,加载自动配置类会加载类中定义的bean,即在目标工程导入了业务的bean实现业务功能。

四.目标工程导入starter

1.先把业务工程install安装到仓库中(右侧maven,点击业务工程,install),这样目标工程才能从仓库中导入

注意:业务工程的每次功能,代码的更新就要clean再install,保证仓库里的是最新版,这样目标工程也能同步上。

2.目标工程的pom文件导入坐标,例如下

<!--		自定义starter-->
		<dependency>
			<groupId>com</groupId>
			<artifactId>ip_spring_boot_starter</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

导入的坐标不清楚可以在业务工程的pom文件中看到,如下图
在这里插入图片描述

五.启动完成业务实现

若想在目标工程中使用业务模块的功能,除了导入坐标,还需要在使用业务模块的位置,进行自动配置,例如下

    @Autowired
    private IpCountService ipCountService;//自动配置
    
    @GetMapping("{currentPage}/{pageSize}")
    public Result getPage(@PathVariable int currentPage,@PathVariable int pageSize,Book book){
    
        ipCountService.count();//调用自定义模块业务方法
       
        IPage<Book> iPage = bookService.getPage(currentPage, pageSize,book);
        //如果当前页码值大于了总页码值,那么重新执行查询操作,使用最大页码值作为当前页码值
        //适用场景: 就是第3页只有一条数据,删除自动刷新后,当前页仍然是3页,但最大页码已经变成2页了,可以f12详细看看
        if (currentPage> iPage.getPages()){
            iPage=bookService.getPage((int)iPage.getPages(),pageSize,book);
        }
        Integer code=iPage!=null?Code.GET_OK:Code.GET_ERR;
        String msg=iPage!=null?"success":"查询失败,请稍后再试";
        return new Result(code,iPage,msg);
    }

该业务实现的就是每次分页查询时,获取访问页面的ip及访问次数

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随身携带的笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值