1、starter 命令规范

  • 1、官方提供的 starter
spring-boot-starter-{name}
  • 2、自己封装的 starter
{name}-spring-boot-starter

2、封装 xxl-job-spring-boot-starter

  • 1、创建项目
    本次我们封装的是 xxl-job的starter,项目命令为 xxl-job-spring-boot-starter,目录结构如下:
  • 2、引入 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.asurplus</groupId><artifactId>xxl-job-spring-boot-starter</artifactId><version>2.3.0</version><name>xxl-job-spring-boot-starter</name><description>SpringBoot整合xxl-job快速开发</description><url>https://gitee.com/asurplus/xxl-job-spring-boot-starter</url><properties><spring.boot.version>2.5.3</spring.boot.version><xxl-job.version>2.3.0</xxl-job.version></properties><dependencies><!--封装Starter核心依赖  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>${spring.boot.version}</version><scope>provided</scope></dependency><!--非必需,该依赖作用是在使用IDEA编写配置文件有代码提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>${spring.boot.version}</version><scope>provided</scope></dependency><!-- xxl-job-core --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${xxl-job.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>

其中,configuration-processor 和 autoconfigure 是必备的,这样才能使用 SpringBoot 的自动装配原理,xxl-job 我们选用的版本为:2.3.0

  • 3、xxl-job 配置参数
import org.springframework.boot.context.properties.ConfigurationProperties;/*** xxl-job properties** @author Asurplus 2022-04-29*/
@ConfigurationProperties(prefix = "xxl-job")
public class XxlJobProperties {private final AdminProperties admin = new AdminProperties();private final ExecutorProperties executor = new ExecutorProperties();private String accessToken = "";public String getAccessToken() {return accessToken;}public void setAccessToken(String accessToken) {this.accessToken = accessToken;}public static class AdminProperties {private String addresses = "http://127.0.0.1:8080/xxl-job-admin";public String getAddresses() {return addresses;}public void setAddresses(String adminAddresses) {this.addresses = adminAddresses;}}public static class ExecutorProperties {private String appname = "xxl-job-executor-sample";private String address;private String ip;private int port = 9999;private String logPath = "/data/applogs/xxl-job/jobhandler";private int logRetentionDays = 30;public String getAppname() {return appname;}public void setAppname(String appname) {this.appname = appname;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public String getLogPath() {return logPath;}public void setLogPath(String logPath) {this.logPath = logPath;}public int getLogRetentionDays() {return logRetentionDays;}public void setLogRetentionDays(int logRetentionDays) {this.logRetentionDays = logRetentionDays;}}public AdminProperties getAdmin() {return admin;}public ExecutorProperties getExecutor() {return executor;}
}
  • 4、xxl-job 配置类
import com.asurplus.spring.starter.xxljob.properties.XxlJobProperties;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** xxl-job config** @author Asurplus 2022-04-29*/
@Configuration
@EnableConfigurationProperties({XxlJobProperties.class})
public class XxlJobConfig {private static Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Bean@ConditionalOnMissingBeanpublic XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties) {XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdmin().getAddresses());xxlJobSpringExecutor.setAppname(xxlJobProperties.getExecutor().getAppname());xxlJobSpringExecutor.setAddress(xxlJobProperties.getExecutor().getAddress());xxlJobSpringExecutor.setIp(xxlJobProperties.getExecutor().getIp());xxlJobSpringExecutor.setPort(xxlJobProperties.getExecutor().getPort());xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());xxlJobSpringExecutor.setLogPath(xxlJobProperties.getExecutor().getLogPath());xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getExecutor().getLogRetentionDays());logger.info(">>>>>>>>>>> xxl-job starting...");return xxlJobSpringExecutor;}}

@ConditionalOnMissingBean,它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员。

  • 5、spring.factories
    在 resources 目录下,创建 META-INF 目录,在 META-INF 目录下创建 spring.factories 文件:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.asurplus.spring.starter.xxljob.config.XxlJobConfig

因为 SpringBoot 默认只扫描启动内所在包下面的配置类,我们自己封装的 starter 是没有启动类的,所以 SpringBoot 就提出了使用 spring.factories 来告诉自动加载需要扫描的文件路径

  • 6、打包发布
    使用 maven 打包:
mvn clean install

在 target 目录得到 xxl-job-spring-boot-starter-2.3.0.jar 文件

3、引入 xxl-job-spring-boot-starter

  • 1、将文件放在项目的 /resources/lib/ 目录下
  • 2、在 pom.xml 文件中引入
<!-- xxl-job-spring-boot-starter:https://gitee.com/asurplus/xxl-job-spring-boot-starter -->
<dependency><groupId>com.asurplus</groupId><artifactId>xxl-job-spring-boot-starter</artifactId><version>2.3.0</version><systemPath>${project.basedir}/src/main/resources/lib/xxl-job-spring-boot-starter-2.3.0.jar</systemPath>
</dependency>
  • 3、配置信息 application.yml
# xxl-job配置信息
xxl-job:admin:# 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册addresses: http://127.0.0.1:8080/xxl-job-admin# 执行器通讯TOKEN [选填]:非空时启用accessToken:executor:# 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册appname: xxl-job-executor-sample# 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题address:# 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务"ip: 127.0.0.1# 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口port: 9999# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径logpath:# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能logretentiondays: 30

至此,我们自己封装自己的starter(xxl-job-spring-boot-starter)就完成了,快去试试吧,也可以直接下载我的项目:

https://gitee.com/asurplus/xxl-job-spring-boot-starter

关于在 SpringBoot 中如何接入 xxl-job 参考我的另一篇博文:【SpringBoot】62、SpringBoot中接入xxl-job实现分布式任务调度

https://blog.csdn.net/qq_40065776/article/details/124475340?spm=1001.2014.3001.5501

如您在阅读中发现不足,欢迎留言!!!

【SpringBoot】63、SpringBoot中教你手把手封装自己的starter(xxl-job-spring-boot-starter)相关推荐

  1. 手把手教你定制标准 Spring Boot starter

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 写在前面 我们每次构建一个 Spring 应用程序时,我 ...

  2. springboot 创建地址_这可能是史上最易懂的 Spring Boot 入门教程

    目录 一.Spring Boot 是什么 二.为什么要使用 Spring Boot 三.快速入门 3.1 创建 Spring Boot 项目 3.2 项目结构 3.3 引入 Web 依赖 3.4 编写 ...

  3. springboot 启动时could not exec java_面试被问为什么使用Spring Boot?答案好像没那么简单...

    公众号[JavaQ]原创,专注分享Java基础原理分析.实战技术.微服务架构.分布式系统构建,诚邀点赞关注! 面试官:项目中有使用Spring Boot吗? 小小白:用过. 面试官:说一下为什么要使用 ...

  4. springboot启动没反应_新特性:Tomcat和Jetty如何处理Spring Boot应用?

    为了方便开发和部署,Spring Boot 在内部启动了一个嵌入式的 Web 容器.我们知道 Tomcat 和 Jetty 是组件化的设计,要启动 Tomcat 或者 Jetty 其实就是启动这些组件 ...

  5. springboot controller访问不到_构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  6. Spring Boot - 手把手教小师妹自定义Spring Boot Starter

    文章目录 Pre 自定义starter的套路 步骤 命名规范 官方命名空间 自定义命名空间 实战 创建一个父maven项目:springboot_custome_starter 创建 两个Module ...

  7. springboot中aop的应用场景_自然语言处理工具包 HanLP在 Spring Boot中的应用

    概 述 HanLP 是基于 Java开发的 NLP工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用.而且 HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的特点, ...

  8. SpringBoot 之Spring Boot Starter依赖包及作用

    spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spring-boot-starter-amqp 通过spring-rabbit来支持 ...

  9. Spring Boot Starter之Mina框架封装

    封装目的 目前是将Mina与Springboot的自动装配然后结合自身公司的业务对Mina进行统一的封装,目的是让代码可读性提高,也跟加便于使用,不用再写重复的代码 功能介绍 实现功能:可以通过注解的 ...

  10. Spring Boot框架知识总结笔记(超详细,一次性到位)狂神说SpringBoot笔记

    开始就进入微服务阶段 javase:OOP MySQL:持久化 html+css+js+jquery+框架:视图,框架不熟练,css不好 javaweb:独立开发MVC三层架构的网站:原始 ssm:框 ...

最新文章

  1. C# Socket实现聊天通信
  2. Darknet_Yolov4实战(一)_安装Ubuntu+cuda+cudnn
  3. 1.2句柄及 WinMain函数
  4. 嵌入式基础之----C语言
  5. 攻击人脸识别,最高奖励10万 | 微众银行第二届金融科技高校技术大赛正式启动...
  6. Delphi6及SqlServer对于生僻字䶮的支持测试
  7. JavaScript(九):JavaScript中的内置对象
  8. bzoj 4568: [Scoi2016]幸运数字(树上倍增+线性基)
  9. Android源码中常用的系统广播
  10. HTML5+CSS3项目实战之河马牙医首页、百度首页、Mac桌面、简书首页、登录注册页面、苏宁易购首页
  11. [4.2]-AutoSAR零基础学习-XCP 测量/校准 <<2>>
  12. springboot微信点餐系统的设计与实现 毕业设计-附源码221541
  13. H.266/VVC代码学习:普通量化和率失真优化量化(RDOQ)
  14. 【深度学习原理第1篇】前馈神经网络,感知机,BP神经网络
  15. Is necessary to close fille in python?
  16. 为什么很多人不喜欢做程序员?甚至讨厌程序员?
  17. nbd 相关概念及操作
  18. 安装Glusterfs
  19. 【前端开发】开启鸿蒙系统2.0(华为mate手机)的安卓调试 - 开发者选项 - USB调试
  20. mac使用allure_mac 上构建 Jenkins+allure 报告时,一直报错

热门文章

  1. Docker 配置国内镜像加速器,加速下载速度
  2. 网络空间地图测绘的战略意义(下)
  3. C/C++——set的基本操作总结
  4. 参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))
  5. 用重合图片去计算网络的峰值分类准确率
  6. 【Spring Security Oauth2】构建资源服务器(二):授权管理(Web授权,注解授权:securedEnabled, prePostEnabled, jsr250Enabled)
  7. (LINPACK)HPL测试成功步骤整理
  8. Make the Team(匈牙利算法)
  9. 如何有效规避程序化交易的滑点?
  10. 魔方机器人之搭建Python编程环境