自定义 Spring Boot Starter

自定义 Spring Boot Starter

参考自:www.wanyj.cn/article/cus...

1. 命名规范

  • 官方的命名方式:spring-boot-starter-xxx
  • 第三方命名方式:xxx-spring-boot-starter

2. 功能开发

2.1. 引入基础依赖

xml 复制代码
<!-- Spring Boot Starter基础依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 自动配置核心依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- 用于生成配置元数据,提供IDE提示支持 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<!-- 其他你需要的依赖 -->

2.2. 编写配置信息类

java 复制代码
import cn.wanyj.component.dcc.types.common.Constants;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "wanyj.component.dcc", ignoreInvalidFields = true)
public class DynamicConfigCenterAutoConfigProperties {

    private String system;

    public String getFinalAttributeName(String attributeName) {
        return this.system + Constants.UNDERLINE + attributeName;
    }

    public String getSystem() {
        return system;
    }

    public void setSystem(String system) {
        this.system = system;
    }
}

这样你就可以在yml文件中配置了

yml 复制代码
wanyj:
  component:
    dcc:
      system: test

2.3. 完成业务逻辑,编写自动配置类

java 复制代码
import cn.wanyj.component.dcc.domain.entity.AttributeEntity;
import cn.wanyj.component.dcc.domain.service.DynamicConfigCenterService;
import cn.wanyj.component.dcc.domain.service.DynamicConfigCenterServiceImpl;
import cn.wanyj.component.dcc.listener.DynamicConfigCenterAdjustListener;
import cn.wanyj.component.dcc.types.common.Constants;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(value = DynamicConfigCenterAutoConfigProperties.class)
public class DynamicConfigCenterRegisterAutoConfig {

    @Bean
    public DynamicConfigCenterService dynamicConfigCenterService(DynamicConfigCenterAutoConfigProperties properties, RedissonClient redissonClient) {
        return new DynamicConfigCenterServiceImpl(properties, redissonClient);
    }

    @Bean
    public DynamicConfigCenterAdjustListener dynamicConfigCenterAdjustListener(DynamicConfigCenterService dynamicConfigCenterService) {
        return new DynamicConfigCenterAdjustListener(dynamicConfigCenterService);
    }

    @Bean
    public RTopic dynamicConfigCenterRedisTopic(DynamicConfigCenterAutoConfigProperties properties, RedissonClient redissonClient, DynamicConfigCenterAdjustListener dynamicConfigCenterAdjustListener) {
        RTopic topic = redissonClient.getTopic(Constants.getTopic(properties.getSystem()));
        topic.addListener(AttributeEntity.class, dynamicConfigCenterAdjustListener);
        return topic;
    }
}

2.4. 使starter生效

  • 方式一:注解启动

你需要自定义一个启动注解

java 复制代码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({DynamicConfigCenterRegisterAutoConfig.class}) // [!code highlight]
public @interface EnableDCC {
}

然后使用时需要在启动类添加这个注解

java 复制代码
@SpringBootApplication
@EnableDCC // [!code highlight]
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • 方式二:自动生效
    • 通过 SpringBoot 的 SPI 的机制来去加载我们的 Starter
    • 需要创建resource/META-INF/spring.factories文件
      • key 为 org.springframework.boot.autoconfigure.EnableAutoConfiguration
      • value 为自动配置类的全限定名(记得去除前后的空格,否则会不生效)
[spring.factories] 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.wanyj.component.dcc.config.DynamicConfigCenterRegisterAutoConfig

!WARNING 注意 在 Springboot3+ 版本完全移除了 spring.factories 的方式 需要更改目录结构为

resource/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

[org.springframework.boot.autoconfigure.AutoConfiguration.imports] 复制代码
cn.wanyj.component.dcc.config.DynamicConfigCenterRegisterAutoConfig
相关推荐
易协同低代码18 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo18 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志18 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..18 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects19 小时前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰19 小时前
一些基础和问题解决
后端
陈随易19 小时前
前端项目部署只要30秒
前端·后端·程序员
YIAN19 小时前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp
Imchendiana19 小时前
《狂人日记NO.9》— 前后端一把梭,我的全栈实录
前端·后端
学渣超19 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构