XXL-JOB任務(wù)調(diào)度使用

背景

系統(tǒng)項目采用多節(jié)點部署,由于代碼中有定時任務(wù)碎乃,多節(jié)點會導(dǎo)致任務(wù)重復(fù)執(zhí)行,會生成大量冗余數(shù)據(jù)惠奸,因此需要把定時任務(wù)功能抽離∶肥模現(xiàn)成的任務(wù)調(diào)度平臺有很多,像Quartz、xxl-job等梗掰,這次嘗試xxl-job嵌言。
XXL-JOB官方文檔:https://www.xuxueli.com/xxl-job/
以下為記錄開發(fā)過程。

開發(fā)

開發(fā)準備

環(huán)境:jdk8
語言:kotlin
框架:spring boot 2.4.5

1. 數(shù)據(jù)庫準備

去到代碼倉庫找到sql文件并創(chuàng)建相關(guān)庫

/xxl-job/doc/db/tables_xxl_job.sql

2. 使用docker鏡像搭建調(diào)度中心

docker pull xuxueli/xxl-job-admin:2.3.0
# 需要配置好數(shù)據(jù)庫的鏈接地址及穗、用戶名及密碼
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:2.3.0

3. maven依賴

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

4. xxl-job配置信息

修改spring的配置文件application.yml摧茴,加入以下信息。這里和官網(wǎng)的寫法有點不太一樣埂陆,是因為我不想要這么多的層級關(guān)系蓬蝶,方便配置對象的構(gòu)建。

xxl:
  job:
    admin-addresses: http://127.0.0.1:8080/xxl-job-admin
    executor-appname: xxl-job-executor
    executor-port: 8082

5. xxl-job配置類

XxlJobProperties.kt用于存儲配置文件的信息猜惋。

import org.springframework.boot.context.properties.ConfigurationProperties

/**
 * @Author  Anson
 * @Date  2021/12/30 11:37
 * @Version 1.0
 */
@ConfigurationProperties(prefix = "xxl.job")
class XxlJobProperties {
    var adminAddresses: String? = null
    var accessToken: String? = null
    var executorAppname: String? = null
    var executorAddress: String? = null
    var executorIp: String? = null
    var executorPort: Int = 0
    var executorLogpath: String? = null
    var executorLogretentiondays: Int = 0
}

XxlJobConfig.kt用于spring boot啟用配置注入粟按。直接使用了文檔里面的代碼,只做了部分調(diào)整悬襟。

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

/**
 * @Author  Anson
 * @Date  2021/12/30 11:14
 * @Version 1.0
 */
@Configuration
@EnableConfigurationProperties(XxlJobProperties::class)
class XxlJobConfig(
    private val properties: XxlJobProperties
) {

    @Bean
    fun xxlJobExecutor(): XxlJobSpringExecutor {
        val xxlJobSpringExecutor = XxlJobSpringExecutor()
        xxlJobSpringExecutor.setAdminAddresses(properties.adminAddresses)
        xxlJobSpringExecutor.setAppname(properties.executorAppname)
        xxlJobSpringExecutor.setAddress(properties.executorAddress)
        xxlJobSpringExecutor.setIp(properties.executorIp)
        xxlJobSpringExecutor.setPort(properties.executorPort)
        xxlJobSpringExecutor.setAccessToken(properties.accessToken)
        xxlJobSpringExecutor.setLogPath(properties.executorLogpath)
        xxlJobSpringExecutor.setLogRetentionDays(properties.executorLogretentiondays)
        return xxlJobSpringExecutor
    }
    /**
     * 針對多網(wǎng)卡管闷、容器內(nèi)部署等情況,可借助 "spring-cloud-commons" 提供的 "InetUtils" 組件靈活定制注冊IP谍咆;
     *
     * 1禾锤、引入依賴:
     * <dependency>
     * <groupId>org.springframework.cloud</groupId>
     * <artifactId>spring-cloud-commons</artifactId>
     * <version>${version}</version>
    </dependency> *
     *
     * 2、配置文件摹察,或者容器啟動變量
     * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     * 3恩掷、獲取IP
     * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

6. 執(zhí)行器

新建MyJob.kt用于調(diào)度中心執(zhí)行任務(wù)。`printLoHandler'名稱需與調(diào)度中心配置的完全一致供嚎。

import com.xxl.job.core.handler.annotation.XxlJob
import org.apache.logging.log4j.LogManager
import org.springframework.stereotype.Component

/**
 * @Author  Anson
 * @Date  2021/12/31 10:08
 * @Version 1.0
 */
@Component
class MyJob{
    private val logger = LogManager.getLogger()

    @XxlJob("printLogHandler")
    fun logHandler() {
        logger.info("[Xxl job Cron job] handler start!")
    }
}

7. 打開調(diào)度中心進行配置

http://127.0.0.1:8080/xxl-job-admin
如何配置就不在這里贅述了黄娘,有界面比較簡單明了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末克滴,一起剝皮案震驚了整個濱河市逼争,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劝赔,老刑警劉巖誓焦,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異着帽,居然都是意外死亡杂伟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門仍翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赫粥,“玉大人,你說我怎么就攤上這事歉备「凳牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喧笔。 經(jīng)常有香客問我帽驯,道長,這世上最難降的妖魔是什么书闸? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任尼变,我火速辦了婚禮,結(jié)果婚禮上浆劲,老公的妹妹穿的比我還像新娘嫌术。我一直安慰自己,他們只是感情好牌借,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布度气。 她就那樣靜靜地躺著,像睡著了一般膨报。 火紅的嫁衣襯著肌膚如雪磷籍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天现柠,我揣著相機與錄音院领,去河邊找鬼。 笑死够吩,一個胖子當(dāng)著我的面吹牛比然,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播周循,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼强法,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鱼鼓?” 一聲冷哼從身側(cè)響起拟烫,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迄本,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體课竣,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉赎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了于樟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片公条。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迂曲,靈堂內(nèi)的尸體忽然破棺而出靶橱,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布关霸,位于F島的核電站传黄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏队寇。R本人自食惡果不足惜膘掰,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佳遣。 院中可真熱鬧识埋,春花似錦、人聲如沸零渐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诵盼。三九已至惠豺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拦耐,已是汗流浹背耕腾。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杀糯,地道東北人扫俺。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像固翰,于是被迫代替她去往敵國和親狼纬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容