1、starter 命令規范
spring
-boot
-starter
-{name
}
{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
import org.springframework.boot.context.properties.ConfigurationProperties;
@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
;}
}
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;
@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 來告訴自動加載需要掃描的文件路徑
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
>
# 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)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。