欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

xxl-job對(duì)比ElasticJob使用示例詳解

 更新時(shí)間:2022年06月17日 10:18:59   作者:_江南一點(diǎn)雨  
這篇文章主要為大家介紹了xxl-job對(duì)比ElasticJob使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1. xxl-job

松哥也在微信群里和小伙伴們討論過各自到底用的是 xxl-job 還是 ElasticJob,討論的結(jié)果就是,xxl-job 使用的人更多一些。

不說功能的優(yōu)劣,我們單純從數(shù)據(jù)上其實(shí)就能看出一些端倪:

這是 xxl-job 的 GitHub:

這是 ElasticJob 的 GitHub:

從這個(gè)數(shù)據(jù)比較上大概也能看出來 xxl-job 更火一些。注意我這里說的是更火一些,不是說 xxl-job 比 ElasticJob 更強(qiáng)。

xxl-job 出自大眾點(diǎn)評(píng),這是一個(gè)分布式輕量級(jí)的任務(wù)調(diào)度框架,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級(jí)、易擴(kuò)展。

xxl-job 通過一個(gè)中心式的調(diào)度平臺(tái),調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過 DB 鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會(huì)增大 DB 的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job 提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能。不同于 ElasticJob,xxl-job 在使用時(shí)依賴 MySQL,而不需要 ZooKeeper。

ElasticJob 則出自當(dāng)當(dāng),設(shè)計(jì) ElasticJob 的初衷是為了面對(duì)高并發(fā)以及復(fù)雜的業(yè)務(wù),即使是在業(yè)務(wù)量大,服務(wù)器多的時(shí)候也能做好任務(wù)調(diào)度,盡可能的利用服務(wù)器的資源。ElasticJob 是無中心化的,如果主服務(wù)器掛了,會(huì)自動(dòng)通過 ZooKeeper 的選舉機(jī)制選舉出新的主服務(wù)器。因此 ElasticJob 具有良好的擴(kuò)展性和可用性。

所以,你打算用哪個(gè)?

2. 運(yùn)行 xxl-job

我們先把 xxl-job 跑起來,再寫我們自己的代碼。

首先我們先把 xxl-job 的代碼搞下來,地址:

https://github.com/xuxueli/xxl-job

然后用 IDEA 打開項(xiàng)目,打開之后,有四個(gè)主要的文件夾:

doc:項(xiàng)目文檔xxl-job-admin:任務(wù)調(diào)度平臺(tái)xxl-job-core:核心代碼xxl-job-executor-samples:案例

由于 xxl-job 運(yùn)行需要數(shù)據(jù)庫,所以接下來我們就來配置數(shù)據(jù)庫,先找到數(shù)據(jù)庫腳本,在 doc/db/tables_xxl_job.sql 位置。

找到數(shù)據(jù)庫腳本后,導(dǎo)入到數(shù)據(jù)庫中執(zhí)行一下,執(zhí)行完成后,生成如下庫和表:

接下來找到 xxl-job-admin/src/main/resources/application.properties 文件,修改數(shù)據(jù)庫連接信息:

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=123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

日志配置也要修改一下,在 xxl-job-admin/src/main/resources/logback.xml 文件中,有如下一行:

<property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>

如果你是 Windows 操作系統(tǒng),這里肯定要改,如果你是 Mac 的話,也有可能沒有這個(gè)目錄的權(quán)限,因此我建議大家改一下這里的配置,改為如下這樣:

<property name="log.path" value="./applogs/xxl-job/xxl-job-admin.log"/>

改為在項(xiàng)目運(yùn)行目錄下生成這個(gè)日志文件。

修改完成后,接下來我們就可以啟動(dòng) xxl-job-admin 項(xiàng)目了,這是一個(gè) SpringBoot 項(xiàng)目,找到啟動(dòng)類,直接運(yùn)行其 main 方法即可。

項(xiàng)目啟動(dòng)成功后,瀏覽器輸入如下地址 http://localhost:8080/xxl-job-admin/toLogin,就可以看到登錄頁面了:

默認(rèn)的登錄賬號(hào)是 admin/123456。

看到如下頁面,就是登錄成功了。

3. 開發(fā)定時(shí)任務(wù)

3.1 項(xiàng)目創(chuàng)建及配置

接下來我們來創(chuàng)建一個(gè)項(xiàng)目,跑一個(gè)定時(shí)任務(wù)看看。

首先創(chuàng)建一個(gè) SpringBoot 項(xiàng)目,引入 Web 依賴,如下:

項(xiàng)目創(chuàng)建成功后,引入 xxl-job 的依賴:

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

然后在 resources 目錄下加入 logback.xml,內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>
    <property name="log.path" value="./applogs/xxl-job/xxl-job-executor-sample-springboot.log"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

修改 application.properties 文件,內(nèi)容如下:

# web port
server.port=8089

# 日志配置
logging.config=classpath:logback.xml

# 配置調(diào)度中心地址
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

# 執(zhí)行器和調(diào)度中心之間的通信令牌,如果沒有配置,表示關(guān)閉了通信令牌的校驗(yàn)。
# 在 xxl-job-admin 的配置文件中,有一個(gè)一模一樣的配置項(xiàng),兩邊都配置,就會(huì)進(jìn)行校驗(yàn)。
xxl.job.accessToken=

# 配置執(zhí)行器的名字
xxl.job.executor.appname=xxl-job-demo
# 執(zhí)行器地址,如果沒有配置,就使用 IP:PORT 作為默認(rèn)值
xxl.job.executor.address=
# 執(zhí)行器 ip 地址
xxl.job.executor.ip=
# 執(zhí)行器端口,默認(rèn)即 9999
xxl.job.executor.port=9999
# 執(zhí)行器日志文件位置
xxl.job.executor.logpath=./applogs/xxl-job/jobhandler
# 執(zhí)行器日志保存時(shí)間
xxl.job.executor.logretentiondays=30

各項(xiàng)配置的含義我已經(jīng)加了注釋了。

接下來再提供一個(gè)配置類,如下:

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }

}

其實(shí)就是把剛剛 application.properties 中的屬性都配置成一個(gè) XxlJobSpringExecutor Bean,很奇怪官方為什么沒把這個(gè)搞成一個(gè)自動(dòng)化配置的 Bean。

接下來我們就可以創(chuàng)建一個(gè)具體的定時(shí)任務(wù)了。

3.2 定時(shí)任務(wù)開發(fā)方式

對(duì)于我們 Java 工程師而言,有三種開發(fā)定時(shí)任務(wù)的方式。

3.2.1 BEAN 模式(類形式)

Bean 模式任務(wù),支持基于類的開發(fā)方式,每個(gè)任務(wù)對(duì)應(yīng)一個(gè) Java 類。

優(yōu)點(diǎn):不限制項(xiàng)目環(huán)境,兼容性好。即使是無框架項(xiàng)目,如 main 方法直接啟動(dòng)的項(xiàng)目也可以提供支持。

缺點(diǎn):

  • 每個(gè)任務(wù)需要占用一個(gè)Java類,造成類的浪費(fèi);
  • 不支持自動(dòng)掃描任務(wù)并注入到執(zhí)行器容器,需要手動(dòng)注入。

開發(fā)方式:

1.開發(fā)一個(gè)繼承自 com.xxl.job.core.handler.IJobHandler 的 JobHandler 類,實(shí)現(xiàn)其中任務(wù)方法。

2.手動(dòng)通過如下方式注入到執(zhí)行器容器:

XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());

3.在調(diào)度中心新建調(diào)度任務(wù)(后續(xù)步驟和 3.2.1 BEAN 模式(方法形式) 一致)。

這種方式用的不多,我就不給大家演示了,小伙伴們可以自行嘗試。

3.2.2 BEAN模式(方法形式)

Bean 模式任務(wù),支持基于方法的開發(fā)方式,每個(gè)任務(wù)對(duì)應(yīng)一個(gè)方法,一般推薦這種方式。

優(yōu)點(diǎn):

  • 每個(gè)任務(wù)只需要開發(fā)一個(gè)方法,并添加 ”@XxlJob” 注解即可,更加方便、快速。
  • 支持自動(dòng)掃描任務(wù)并注入到執(zhí)行器容器。

缺點(diǎn):

要求 Spring 容器環(huán)境。

基于方法開發(fā)的任務(wù),底層會(huì)生成 JobHandler 代理,和基于類的方式一樣,任務(wù)也會(huì)以 JobHandler 的形式存在于執(zhí)行器任務(wù)容器中。

開發(fā)步驟:

1.開發(fā) Job 方法:

@Component
public class MyJob {
    @XxlJob("demoJobHandler")
    public ReturnT<String> demoJobHandler() throws Exception {
        String param = XxlJobHelper.getJobParam();
        XxlJobHelper.log("XXL-JOB, Hello World:{}",param);
        return ReturnT.SUCCESS;
    }
}

這里的 @XxlJob 注解標(biāo)記了這是一個(gè)定時(shí)任務(wù)方法,該注解還有 init 和 destroy 屬性,可以分別用來配置初始化和銷毀的方法。

XxlJobHelper.getJobParam() 可以用來獲取任務(wù)參數(shù)。

在這個(gè)過程中,我們需要通過 XxlJobHelper.log 打印執(zhí)行日志。

默認(rèn)任務(wù)結(jié)果為 “成功” 狀態(tài),不需要主動(dòng)設(shè)置;如有訴求,比如設(shè)置任務(wù)結(jié)果為失敗,可以通過 XxlJobHelper.handleFail/handleSuccess 自主設(shè)置任務(wù)結(jié)果。

然后啟動(dòng) SpringBoot 項(xiàng)目。

2.配置調(diào)度中心,新建調(diào)度任務(wù)

接下來打開配置調(diào)度中心,找到執(zhí)行器管理,點(diǎn)擊新增,如下:

如果是自動(dòng)注冊(cè)的話,可以不用填機(jī)器地址。

接下來找到任務(wù)管理,并點(diǎn)擊新增:

基礎(chǔ)配置都沒啥好說的。

調(diào)度類型選擇 CRON 表達(dá)式,CRON 表達(dá)式可以自己填,也可以點(diǎn)擊后面的編輯按鈕自動(dòng)生成。

運(yùn)行模式就選擇 BEAN,JobHandler 的值就是我們前面 @XxlJob 注解中填的值,任務(wù)參數(shù)就是定時(shí)任務(wù)的方法參數(shù)。

配置完成后,回到執(zhí)行器管理,點(diǎn)擊查看,可以查看剛剛注冊(cè)的節(jié)點(diǎn)信息:

再次回到任務(wù)管理,選擇啟動(dòng),就可以開始定時(shí)任務(wù)的執(zhí)行了:

開啟之后,點(diǎn)擊調(diào)度日志,就可以看到我們系統(tǒng)任務(wù)執(zhí)行的詳細(xì)信息了:

可以看到,每隔 5 秒執(zhí)行一次。

點(diǎn)擊調(diào)度備注,可以查看一些調(diào)度細(xì)節(jié):

在右邊操作按鈕中選擇執(zhí)行日志:

可以查看執(zhí)行細(xì)節(jié):

紅色框出來的,就是我們剛剛自己打印的。

當(dāng)然這里還有一些其他玩法,小伙伴們可以自行點(diǎn)擊按鈕嘗試,我就不贅述了。

3.2.3 GLUE 模式(Java)

任務(wù)以源碼方式維護(hù)在調(diào)度中心,支持通過 Web IDE 在線更新,實(shí)時(shí)編譯和生效,因此不需要指定 JobHandler。即在網(wǎng)頁上寫定時(shí)任務(wù)的代碼,然后去執(zhí)行。

這種方式個(gè)人感覺使用較少,小伙伴們了解一下即可。

開發(fā)流程如下:

調(diào)度中心->任務(wù)管理,新建調(diào)度任務(wù),新建時(shí)選擇 “GLUE模式(Java)”:

2.開發(fā)任務(wù)代碼:選中指定任務(wù),點(diǎn)擊該任務(wù)右側(cè) GLUE 按鈕,將會(huì)前往 GLUE 任務(wù)的 Web IDE 界面,在該界面支持對(duì)任務(wù)代碼進(jìn)行開發(fā)(也可以在IDE中開發(fā)完成后,復(fù)制粘貼到編輯中)。

編輯完成后,保存即可。接下來又和前面一樣了,啟動(dòng)任務(wù),后查看調(diào)度日志。

這里支持 30 個(gè)版本的版本回溯,在 GLUE 任務(wù)的 Web IDE 界面,選擇右上角下拉框“版本回溯”,會(huì)列出該 GLUE 的更新歷史,選擇相應(yīng)版本即可顯示該版本代碼,保存后 GLUE 代碼即回退到對(duì)應(yīng)的歷史版本。

4. 小結(jié)

好啦,這就是我跟大家介紹的 xxl-job,感興趣的小伙伴可以試試哦~

本文案例 https://github.com/lenve/javaboy-code-samples/tree/master/xxl-job-demo

以上就是xxl-job對(duì)比ElasticJob使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于xxl-job對(duì)比ElasticJob的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增刪改查分頁)

    SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增刪改查分頁)

    這篇文章主要給大家介紹了關(guān)于SpringMVC4 + MyBatis3 + SQL Server 2014整合的相關(guān)資料,文中包括介紹了增刪改查分頁等相關(guān)內(nèi)容,通過示例代碼介紹的非常詳細(xì),分享出來供大家參考學(xué)習(xí),下面來一起看看吧。
    2017-06-06
  • 解決java.net.SocketTimeoutException: Read timed out的問題

    解決java.net.SocketTimeoutException: Read timed out的問題

    這篇文章主要介紹了解決java.net.SocketTimeoutException: Read timed out的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java項(xiàng)目導(dǎo)出數(shù)據(jù)為 PDF 文件的操作代碼

    Java項(xiàng)目導(dǎo)出數(shù)據(jù)為 PDF 文件的操作代碼

    一個(gè)小需求,需要將頁面上的數(shù)據(jù)導(dǎo)出為PDF,正常情況下這個(gè)需求需要讓前端來做,但是現(xiàn)在上面讓咱們后端來做,也沒問題,這篇文章主要介紹了Java項(xiàng)目導(dǎo)出數(shù)據(jù)為 PDF 文件的操作代碼,需要的朋友可以參考下
    2022-12-12
  • RocketMQ整合SpringBoot實(shí)現(xiàn)生產(chǎn)級(jí)二次封裝

    RocketMQ整合SpringBoot實(shí)現(xiàn)生產(chǎn)級(jí)二次封裝

    本文主要介紹了RocketMQ整合SpringBoot實(shí)現(xiàn)生產(chǎn)級(jí)二次封裝,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 如何利用Spring把元素解析成BeanDefinition對(duì)象

    如何利用Spring把元素解析成BeanDefinition對(duì)象

    這篇文章主要介紹了如何利用Spring把元素解析成BeanDefinition對(duì)象,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • JAVA基礎(chǔ)之繼承(inheritance)詳解

    JAVA基礎(chǔ)之繼承(inheritance)詳解

    繼承(inheritance)是Java OOP中一個(gè)非常重要的概念。這篇文章主要介紹了JAVA基礎(chǔ)之繼承(inheritance),需要的朋友可以參考下
    2017-03-03
  • Java中HTTP接口請(qǐng)求重試的實(shí)現(xiàn)方式

    Java中HTTP接口請(qǐng)求重試的實(shí)現(xiàn)方式

    HTTP接口請(qǐng)求重試是指在請(qǐng)求失敗時(shí),再次發(fā)起請(qǐng)求的機(jī)制,在實(shí)際應(yīng)用中,由于網(wǎng)絡(luò)波動(dòng)、服務(wù)器故障等原因,HTTP接口請(qǐng)求可能會(huì)失敗,為了保證系統(tǒng)的可用性和穩(wěn)定性,需要對(duì)HTTP接口請(qǐng)求進(jìn)行重試,所以本文給大家介紹了HTTP接口請(qǐng)求重試的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-01-01
  • Java實(shí)戰(zhàn)寵物店在線交易平臺(tái)的實(shí)現(xiàn)流程

    Java實(shí)戰(zhàn)寵物店在線交易平臺(tái)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+maven+Mysql+FreeMarker實(shí)現(xiàn)一個(gè)寵物在線交易系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • java直接插入排序示例

    java直接插入排序示例

    這篇文章主要介紹了java直接插入排序示例,插入排序的比較次數(shù)仍然是n的平方,但在一般情況下,它要比冒泡排序快一倍,比選擇排序還要快一點(diǎn)。它常常被用在復(fù)雜排序算法的最后階段,比如快速排序。
    2014-05-05
  • Maven之導(dǎo)入thymeleaf依賴飄紅問題及解決

    Maven之導(dǎo)入thymeleaf依賴飄紅問題及解決

    這篇文章主要介紹了Maven之導(dǎo)入thymeleaf依賴飄紅問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論