当前位置: 首页 > news >正文

自定义SpringBoot Starter

✅自定义SpringBoot Starter

SpringBoot 的 starter 可以帮我们简化配置,非常的方便,定义起来其实也不复杂,我的项目中定义了很多 starter,比如business-job就是一个 stater,以他为例,介绍下如何定义 starter:



1、添加依赖



添加Spring Boot的依赖:

<dependencies>
​
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
​
</dependencies>
​

2、实现自动配置



在starter项目中,创建自动配置类。这个类要使用@Configuration注解,并根据条件使用@ConditionalOn...注解来条件化地配置beans。



import org.springframework.boot.context.properties.ConfigurationProperties;
​
/**
 * @author wzc
 */
@ConfigurationProperties(prefix = XxlJobProperties.PREFIX)
public class XxlJobProperties {
​
    public static final String PREFIX = "spring.xxl.job";
​
    private boolean enabled;
​
    private String adminAddresses;
​
    private String accessToken;
​
    private String appName;
​
    private String ip;
​
    private int port;
​
    private String logPath;
​
    private int logRetentionDays = 30;
​
    //getter setter
}


接下来定义Configuration,并且在其中创建需要的bean:



import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
/**
 * @author wzc
 */
@Configuration
@EnableConfigurationProperties(XxlJobProperties.class)
public class XxlJobConfiguration {
​
    private static final Logger logger = LoggerFactory.getLogger(XxlJobConfiguration.class);
​
    @Autowired
    private XxlJobProperties properties;
​
    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = XxlJobProperties.PREFIX, value = "enabled", havingValue = "true")
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(properties.getAdminAddresses());
        xxlJobSpringExecutor.setAppname(properties.getAppName());
        xxlJobSpringExecutor.setIp(properties.getIp());
        xxlJobSpringExecutor.setPort(properties.getPort());
        xxlJobSpringExecutor.setAccessToken(properties.getAccessToken());
        xxlJobSpringExecutor.setLogPath(properties.getLogPath());
        xxlJobSpringExecutor.setLogRetentionDays(properties.getLogRetentionDays());
        return xxlJobSpringExecutor;
    }
}



这里面用@Bean 注解声明了一个bean,并且使用@ConditionalOnMissingBean类指定这个bean的创建条件,即在确实的时候创建。



@ConditionalOnProperty(prefix = XxlJobProperties.PREFIX, value = "enabled", havingValue = "true")约定了当我们配置了spring.xxl.job.enable=true的时候才会生效。



3、创建配置类入口文件



在你的starter项目的src/main/resources下,创建META-INF/spring目录,并且创建一个

org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,内容如下:



cn.business.job.config.XxlJobConfiguration



以上就定义好了一个starter,只需要在需要的地方引入,并且配置上相应的配置项就行了,配置项内容就是我们定义在XxlJobProperties中的。



以前,我们配置这些Configuration的时候会用spring.factories,但是这个已经被官方标记为过期,不建议使用了。

相关文章:

  • 反向代理模块kfj
  • Java 内部类
  • 3_Hadoop集群的格式化、启动、关闭和状态
  • C++命名空间域
  • Pi币与XBIT:在去中心化交易所的崛起中重塑加密市场
  • 专业的UML开发工具StarUML
  • 华山论剑之JAVA中的“方法论”
  • 深入剖析:基于红黑树实现自定义 map 和 set 容器
  • 【运维】内网服务器借助通过某台可上外网的服务器实现公网访问
  • 双指针2:1089. 复写零
  • #6【TIP2023】Dif-Fusion
  • CSS 真的会阻塞文档解析吗?
  • android studio 中止了一个已建立的连接
  • 线程的状态
  • 结构化需求分析SA
  • JavaWeb开发入门:从前端到后端的完整流程解析
  • vue3按钮级别权限处理,自定义指令
  • redis主从哨兵模式+Lua报错-READONLY You can‘t write against a read
  • Java之异常体系
  • Java Set实现类面试题
  • 余姚专业网站建设公司/常州seo关键词排名
  • 建设网站用户名是什么/google搜索关键词
  • 海城网站制作建设/百度热搜榜排名昨日
  • 深圳网站建设联系方式/站长工具seo诊断
  • wordpress 中英文网站/推广方案格式模板范文
  • 岳阳市住房和城乡建设路网站/关键词代发排名首页