【SpringBoot】63、SpringBoot中教你手把手封装自己的starter(xxl-job-spring-boot-starter)
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)相关推荐
- 手把手教你定制标准 Spring Boot starter
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 写在前面 我们每次构建一个 Spring 应用程序时,我 ...
- springboot 创建地址_这可能是史上最易懂的 Spring Boot 入门教程
目录 一.Spring Boot 是什么 二.为什么要使用 Spring Boot 三.快速入门 3.1 创建 Spring Boot 项目 3.2 项目结构 3.3 引入 Web 依赖 3.4 编写 ...
- springboot 启动时could not exec java_面试被问为什么使用Spring Boot?答案好像没那么简单...
公众号[JavaQ]原创,专注分享Java基础原理分析.实战技术.微服务架构.分布式系统构建,诚邀点赞关注! 面试官:项目中有使用Spring Boot吗? 小小白:用过. 面试官:说一下为什么要使用 ...
- springboot启动没反应_新特性:Tomcat和Jetty如何处理Spring Boot应用?
为了方便开发和部署,Spring Boot 在内部启动了一个嵌入式的 Web 容器.我们知道 Tomcat 和 Jetty 是组件化的设计,要启动 Tomcat 或者 Jetty 其实就是启动这些组件 ...
- springboot controller访问不到_构建微服务:快速搭建Spring Boot项目
Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...
- Spring Boot - 手把手教小师妹自定义Spring Boot Starter
文章目录 Pre 自定义starter的套路 步骤 命名规范 官方命名空间 自定义命名空间 实战 创建一个父maven项目:springboot_custome_starter 创建 两个Module ...
- springboot中aop的应用场景_自然语言处理工具包 HanLP在 Spring Boot中的应用
概 述 HanLP 是基于 Java开发的 NLP工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用.而且 HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的特点, ...
- SpringBoot 之Spring Boot Starter依赖包及作用
spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spring-boot-starter-amqp 通过spring-rabbit来支持 ...
- Spring Boot Starter之Mina框架封装
封装目的 目前是将Mina与Springboot的自动装配然后结合自身公司的业务对Mina进行统一的封装,目的是让代码可读性提高,也跟加便于使用,不用再写重复的代码 功能介绍 实现功能:可以通过注解的 ...
- Spring Boot框架知识总结笔记(超详细,一次性到位)狂神说SpringBoot笔记
开始就进入微服务阶段 javase:OOP MySQL:持久化 html+css+js+jquery+框架:视图,框架不熟练,css不好 javaweb:独立开发MVC三层架构的网站:原始 ssm:框 ...
最新文章
- C# Socket实现聊天通信
- Darknet_Yolov4实战(一)_安装Ubuntu+cuda+cudnn
- 1.2句柄及 WinMain函数
- 嵌入式基础之----C语言
- 攻击人脸识别,最高奖励10万 | 微众银行第二届金融科技高校技术大赛正式启动...
- Delphi6及SqlServer对于生僻字䶮的支持测试
- JavaScript(九):JavaScript中的内置对象
- bzoj 4568: [Scoi2016]幸运数字(树上倍增+线性基)
- Android源码中常用的系统广播
- HTML5+CSS3项目实战之河马牙医首页、百度首页、Mac桌面、简书首页、登录注册页面、苏宁易购首页
- [4.2]-AutoSAR零基础学习-XCP 测量/校准 <<2>>
- springboot微信点餐系统的设计与实现 毕业设计-附源码221541
- H.266/VVC代码学习:普通量化和率失真优化量化(RDOQ)
- 【深度学习原理第1篇】前馈神经网络,感知机,BP神经网络
- Is necessary to close fille in python?
- 为什么很多人不喜欢做程序员?甚至讨厌程序员?
- nbd 相关概念及操作
- 安装Glusterfs
- 【前端开发】开启鸿蒙系统2.0(华为mate手机)的安卓调试 - 开发者选项 - USB调试
- mac使用allure_mac 上构建 Jenkins+allure 报告时,一直报错
热门文章
- Docker 配置国内镜像加速器,加速下载速度
- 网络空间地图测绘的战略意义(下)
- C/C++——set的基本操作总结
- 参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))
- 用重合图片去计算网络的峰值分类准确率
- 【Spring Security Oauth2】构建资源服务器(二):授权管理(Web授权,注解授权:securedEnabled, prePostEnabled, jsr250Enabled)
- (LINPACK)HPL测试成功步骤整理
- Make the Team(匈牙利算法)
- 如何有效规避程序化交易的滑点?
- 魔方机器人之搭建Python编程环境