自定義一個starter

????????在Spring Boot中,創建一個自定義starter可以簡化特定功能或組件的配置過程,讓其他項目能夠輕松地重用這些功能。

這里我們以自定義一個xxl-job的starter為例,介紹下如何簡化配置。

添加依賴

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- 其他需要的依賴 -->
</dependencies>

實現自動配置

????????

import org.springframework.boot.context.properties.ConfigurationProperties;/*** */
@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;/*** */
@Configuration
@EnableConfigurationProperties(XxlJobProperties.class)
public class XxlJobConfiguration {private static final Logger logger = LoggerFactory.getLogger(XxlJobConfiguration.class);@Autowiredprivate 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的時候才會生效。

在你的starter項目的src/main/resources下,創建META-INF/spring目錄,并且創建一個
org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,內容如下:

cn.hollis.nft.turbo.job.config.XxlJobConfiguration

以上就定義好了一個starter,只需要在需要的地方引入,并且配置上相應的配置項就行了,配置項內容就是我們定義在XxlJobProperties中的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13005.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STK中的光照計算模型

本文簡要闡述STK中光照計算的模型。 在航天任務中&#xff0c;通常需要分析地面站、飛行器在一定時間內的光照情況&#xff0c;具體包括&#xff1a; 地面站處在光照區和陰影區的具體時間范圍&#xff1b;考慮地形遮擋后&#xff0c;地面站的光照區和陰影區的變化情況&#x…

985大學電子信息專碩,考C語言+數據結構!中央民族大學25計算機考研考情分析!

中央民族大學&#xff08;Minzu University of China&#xff09;坐落于北京市學府林立的海淀區&#xff0c;南鄰國家圖書館&#xff0c;北依中關村科技園&#xff0c;校園環境典雅&#xff0c;古樸幽美&#xff0c;人文氛圍濃郁&#xff0c;具有鮮明的民族特色。由北京市、國家…

Java byte數據類型

在Java中&#xff0c;byte是一種基本的數據類型&#xff0c;用于表示整數值。它是8位帶符號的二進制補碼&#xff0c;范圍從-128到127&#xff08;包括&#xff09;。 以下是一些關于byte數據類型的重要信息&#xff1a; 大小和范圍&#xff1a;byte數據類型占用8位&#xff0…

Oracle 日志文件頭中的SCN

日志文件頭中的SCN主要分以下3類&#xff1a; 1、FIRST_CHANGE 2、NEXT_CHANGE 3、RESETLOGS_CHANGE# FIRST_CHANGE# FIRST_CHANGE#表示該在線日志文件被重用時的SCN。可以從VKaTeX parse error: Expected EOF, got # at position 25: …RY.FIRST_CHANGE#?列查詢&#xff0c;…

Cesium學習_-著色器

著色器GLSL CesiumJS PrimitiveAPI 高級著色入門 - 從參數化幾何與 Fabric 材質到著色器 - 下篇 - 知乎 明確一個定義&#xff0c;在 Primitive API 中應用著色器&#xff0c;實際上是給 Appearance 的 vertex- ShaderSource、fragmentShaderSource 或 Material 中的 fabric.…

Java 異步編程——為什么要使用多線程,以及在什么情況下使用多線程?

前言 單線程就是一個工人在搬磚&#xff0c;多線程就是多個工人在搬磚&#xff1b;在相同數量的磚要搬的情況下&#xff0c;多個工人搬磚肯定比一個人搬的快。 那多個工人做事一定比一個工人做事快嗎&#xff1f;那不一定&#xff0c;不過大多數情況下是的。多線程只是可以同…

Java并發編程——線程安全

在Java并發編程中&#xff0c;線程安全是一個非常重要的概念。當多個線程同時訪問共享數據時&#xff0c;如果沒有采取適當的同步措施&#xff0c;就可能會導致數據不一致或其他不可預期的行為&#xff0c;這就是線程不安全的情況。 為了保證線程安全&#xff0c;Java提供了一…

Google Ads谷歌廣告賬戶被封停怎么辦?

跨境出海業務少不了需要做Google Ads推廣業務&#xff1b;其中讓投手們聞風喪膽的消息就是帳戶被暫停。當 Google 檢測到任何違反其政策且可能損害用戶在線體驗的行為時&#xff0c;就會發生這種情況。那么如何在做廣告推廣的同時&#xff0c;保證賬號不被封禁呢&#xff1f;看…

【微服務最全詳解】

文章目錄 微服務微服務的介紹微服務服務架構演變 微服務網關微服務的負載均衡微服務的容災機制服務崩潰服務容災機制微服務熔斷機制微服務限流Sentinel怎么實現限流微服務限流算法1.令牌桶算法2.漏斗桶算法 服務監控日志收集 微服務 微服務的介紹 微服務是一種軟件架構風格&a…

大模型日報2024-05-15

大模型日報 2024-05-15 大模型資訊 OpenAI推出全新AI模型GPT-4o&#xff0c;具備文本、圖像和音頻處理能力 摘要: OpenAI公司繼ChatGPT后&#xff0c;最新推出了名為GPT-4o的AI模型。這一模型不僅能夠理解和生成文本&#xff0c;還新增了圖像和音頻的解釋及生成功能。GPT-4o作為…

中國開源 AI 大模型之光-InternLM2

今天給大家帶來 AI 大模型領域的國產之光 - InternLM2&#xff0c;在10B量級開源大模型領域取得了全球 Top 3 的成績&#xff0c;僅次于 Meta 發布的 Llama-3&#xff0c;在國內則是第一名的存在&#xff01; 簡介 InternLM2是由上海人工智能實驗室和商湯科技聯合研發的一款大型…

最大子序列的分數

題目鏈接 最大子序列的分數 題目描述 注意點 n nums1.length nums2.length從nums1和nums2中選一個長度為k的子序列對應的下標對nums1中下標對應元素求和&#xff0c;乘以nums2中下標對應元素的最小值得到子序列的分數0 < nums1[i], nums2[j] < 1000001 < k < …

Leecode熱題100---560:和為k的子數組個數

題目&#xff1a; 給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 C&#xff1a; #include<iostream> #include<vector> using namespace std; class Solution { public:…

AI作畫算法詳解:原理、應用與未來發展

隨著人工智能技術的不斷發展&#xff0c;AI作畫逐漸成為了一個熱門話題。AI作畫&#xff0c;即利用人工智能算法生成繪畫作品&#xff0c;不僅僅是技術的展示&#xff0c;更是藝術與科技結合的創新體現。本文將深入探討AI作畫的核心算法原理&#xff0c;并通過實例幫助讀者更好…

多步預測系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合

● 環境框架&#xff1a;python 3.9 pytorch 1.8 及其以上版本均可運行 ● 使用對象&#xff1a;論文需求、畢業設計需求者 ● 代碼保證&#xff1a;代碼注釋詳細、即拿即可跑通。 往期精彩內容&#xff1a; 時序預測&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分…

數據結構篇3—《龍門客“棧”》

文章目錄 &#x1f6a9;前言1、棧的概念2、棧的實現框架3、棧的代碼實現3.1、棧的初始化和銷毀3.2、入棧\出棧\返回棧頂元素\元素個數\判空3.3、棧定義注意事項 4、棧的應用實例——《括號匹配問題》 &#x1f6a9;前言 前面記錄了關于順序表和鏈表的數據結構&#xff0c;這一篇…

【CF1965A】Everything Nim

題目鏈接 前置trick&#xff1a; 使用vector去重&#xff1a; vector<int> a(n);for(int i0;i<n;i) cin>>a[i];sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());na.size();題意&#xff1a; 有 n n n堆石子&#xff0c;第 i i i堆有 a i a…

【企業宣傳片】拍攝思維提升,專業影視質感核心揭密,一課搞定

課程下載&#xff1a;【企業宣傳片】拍攝-課程網盤鏈接提取碼下載.txt資源-CSDN文庫 更多資源下載&#xff1a;關注我。 課程介紹 大量案例分析宣傳片拍攝的痛點要點 根據案例告訴你解決方案&#xff0c;講透概念 改變你對企業宣傳片的思維層級與認知 歸納總結對比不同案…

C++語法|類直接包含與自身類型相同的成員變量?

在C中&#xff0c;一個類不能直接包含與自身類型相同的成員變量。這是因為類的大小需要在編譯時確定&#xff0c;而一個包含自身類型的成員變量會導致遞歸定義&#xff0c;從而無法確定類的大小。 文章目錄 示例代碼&#xff08;非法定義&#xff09;解決辦法1.使用指針2.使用智…

k8s 二進制安裝 優化架構之 部署負載均衡,加入master02

目錄 一 實驗環境 二 部署 CoreDNS 1&#xff0c;所有node加載coredns.tar 鏡像 2&#xff0c;在 master01 節點部署 CoreDNS 3&#xff0c; DNS 解析測試 4&#xff0c; 報錯分析 5&#xff0c;重新 DNS 解析測試 三 master02 節點部署 1&#xff0…