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

Java實(shí)現(xiàn)定時(shí)任務(wù)的方法總結(jié)

 更新時(shí)間:2023年06月26日 11:21:48   作者:糊涂涂是個(gè)小盆友  
這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)定時(shí)任務(wù)的常用7中方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下

補(bǔ)充:cron表達(dá)式

秒 分 時(shí) 日期 月份 星期

如果日期有則星期為?

如果星期有則日期為?

基本知識(shí)

調(diào)度器 Scheduler : 運(yùn)行到觸發(fā)時(shí)間點(diǎn)

觸發(fā)器 Trigger : 到達(dá)某一時(shí)間點(diǎn)后觸發(fā)鬧鐘

執(zhí)行器 Executors : 觸發(fā)鬧鐘后執(zhí)行響聲

方式一:使用sleep方法

無(wú)法指定時(shí)間

public class SleepDemo1 {
    public static void main(String[] args) {
        Runnable task = new Runnable(){
            @Override
            public void run() {
                while (true){
                    System.out.println("hello");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        Thread thread = new Thread(task);
        thread.start();
    }
}

方式二:JDK Timer和TimerTask

因?yàn)榈谝环N的定時(shí)任務(wù)方法

java.util.Timer、java.util.TimerTask 非線程安全

每隔1秒執(zhí)行1次

public class TimerDemo2 {
    public static void main(String[] args) {
        TimerTask task = new TimerTask(){
            @Override
            public void run() {
                System.out.println("hello");
            }
        };
        Timer timer = new Timer();
        long delay = 1000;
        long interval = 2000;
        timer.schedule(task,delay,interval);
    }
}

方式三:JDK ScheduledExecutorService

java.util.concurrent.ScheduledExecutorService

可以使用它創(chuàng)建和執(zhí)行定期執(zhí)行的任務(wù),并且可以控制任務(wù)的執(zhí)行頻率。

使用Executors類的newScheduledThreadPool方法創(chuàng)建了一個(gè)ScheduledExecutorService對(duì)象,并使用該對(duì)象的scheduleAtFixedRate方法將任務(wù)安排在每隔1秒鐘執(zhí)行一次??梢愿鶕?jù)需要更改任務(wù)的執(zhí)行頻率。

public class ScheduleExcutorsDemo3 {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        Runnable task = new Runnable(){
            @Override
            public void run() {
                System.out.println("hello");
            }
        };
        scheduledExecutorService.scheduleAtFixedRate(task,0,1, TimeUnit.SECONDS);
    }
}

方式四: Spring Task 中 的 @Scheduler

可以使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)。該注解可以在Spring項(xiàng)目中使用,以在指定的時(shí)間間隔內(nèi)自動(dòng)調(diào)用指定方法。

每隔1秒鐘打印“hello timer”:

import org.springframework.scheduling.annotation.Scheduled; 
public class ScheduledAnnotationExample { 
    @Scheduled(fixedRate = 1000) 
    public void printMessage() { 
        System.out.println("hello timer"); 
    } 
}

方法五、Quartz框架

可以使用Quartz創(chuàng)建簡(jiǎn)單的周期性任務(wù),也可以創(chuàng)建復(fù)雜的作業(yè)調(diào)度,例如每周一次的作業(yè)

1、導(dǎo)入依賴

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

方式六:XXL-JOB

分布式任務(wù)調(diào)度平臺(tái)

下載代碼:https://gitee.com/xuxueli0323/xxl-job,通過(guò)git clone

將SQL運(yùn)行到navcate中:doc/db/xxx.sql 找到克隆下來(lái)的項(xiàng)目中該目錄下的sql文件 Navicat創(chuàng)建相對(duì)應(yīng)的數(shù)據(jù)庫(kù)

修改admin下的配置文件:郵箱、數(shù)據(jù)庫(kù)連接(jdbc:mysql://localhost:3306/xxl_job?serverTimeZone=Asia/Shanghai)

運(yùn)行啟動(dòng)類

訪問(wèn) http://localhost:8080/xxl-job-admin 默認(rèn)賬戶admn,密碼123456

編寫(xiě)一個(gè)自己的代碼

在頁(yè)面中添加定時(shí)任務(wù)并啟動(dòng)運(yùn)行

運(yùn)行報(bào)錯(cuò):執(zhí)行器地址為空

打開(kāi)頁(yè)面中的執(zhí)行器管理,新增一條

Appname在代碼中springboot項(xiàng)目配置文件下的appname,因?yàn)槭亲詣?dòng)注冊(cè)所以不用添加地址

注意:代碼不止需要運(yùn)行admin的啟動(dòng)類,兩個(gè)都需要運(yùn)行

將xxl-job與springboot項(xiàng)目整合

1、將源代碼中的admin打包 clear - install 然后將jar包復(fù)制到自定義的文件夾中,在該文件夾的目錄下啟動(dòng)

java -jar xxl-job-admin-2.4.1-SNAPSHOT.jar

訪問(wèn):http://localhost:8080/xxl-job-admin/

2、在項(xiàng)目中導(dǎo)入依賴

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

3、將xxl-job-executor-sample-springboot這個(gè)模塊下的XxlJobConfig復(fù)制一份到springboot的項(xiàng)目中,然后將相關(guān)配置設(shè)置好即可(第4步 復(fù)制粘貼)

4、配置文件(使用application.properties才能正確不能用yml)

#xxljob定時(shí)任務(wù)
xxl.job.admin.addresses=http://192.168.129.1:8080/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=default_token
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

5、編寫(xiě)自己的定時(shí)任務(wù)

@Component
public class MyTestHandler extends IJobHandler {
    @Override
    @XxlJob(value = "mytest1")
    public void execute() throws Exception {
        System.out.println("成功啦");
    }
}

6、在網(wǎng)頁(yè)中添加定時(shí)任務(wù)執(zhí)行器然后啟動(dòng)

方式七:powerjob

相比于xxl-job更加的復(fù)雜,可以個(gè)性化,每一個(gè)appname達(dá)到了隔離

https://www.yuque.com/powerjob/guidence/bdvp1u#4DTFD

1、從github中下載項(xiàng)目

git clone https://github.com/PowerJob/PowerJob.git

2、創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)(對(duì)比xxl-job來(lái)說(shuō)更加的簡(jiǎn)潔,只需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)即可)

CREATE DATABASE IF NOT EXISTS powerjob-daily DEFAULT CHARSET utf8mb4

3、修改配置文件中修改數(shù)據(jù)庫(kù)的配置

powerjob-server/powerjob-server-starter/application-daliy.properties

jdbc:mysql://localhost:3306/powerjob-daily?serverTimeZone=Asia/Shanghai

4、運(yùn)行serve/starter下的主啟動(dòng)類PowerJobServerApplication

如果運(yùn)行不了,需要使用maven的clear以及install

5、打開(kāi)頁(yè)面

http://localhost:7700/

6、注冊(cè)應(yīng)用

填入powerjob-agent-test(需要與第七步中appname一致)和注冊(cè)密碼

7、編寫(xiě)示例代碼

powerjob-worker-samples/application.properties修改app-name(與第六步一致)

8、編寫(xiě)自己的代碼(建立一個(gè)新的類,繼承想要使用的處理器)然后運(yùn)行主啟動(dòng)類

各個(gè)處理器:https://www.yuque.com/powerjob/guidence/hczm7m

@Slf4j
@Component
public class TestHandler implements BasicProcessor {
    @Override
    public ProcessResult process(TaskContext context) throws Exception {
        // powerjob在線日志功能,使用該log可以直接在控制臺(tái)查看
        OmsLogger omsLogger = context.getOmsLogger();
        omsLogger.info("程序正在啟動(dòng),定時(shí)任務(wù)開(kāi)啟:{}",context);
        return new ProcessResult(true,"成功");
    }
}

9、進(jìn)入頁(yè)面創(chuàng)建任務(wù)

任務(wù)管理-新建任務(wù)

以上就是Java實(shí)現(xiàn)定時(shí)任務(wù)的方法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java定時(shí)任務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA實(shí)現(xiàn)打印ascii碼表代碼

    JAVA實(shí)現(xiàn)打印ascii碼表代碼

    這篇文章主要介紹了JAVA實(shí)現(xiàn)打印ascii碼表代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java中歸并排序和Master公式詳解

    java中歸并排序和Master公式詳解

    大家好,本篇文章主要講的是java中歸并排序和Master公式詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 在mybatis中如何將Map作為參數(shù)

    在mybatis中如何將Map作為參數(shù)

    這篇文章主要介紹了在mybatis中如何將Map作為參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳細(xì)分析Java 泛型的使用

    詳細(xì)分析Java 泛型的使用

    這篇文章主要介紹了Java 泛型的使用,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • maven中pom.xml詳細(xì)介紹

    maven中pom.xml詳細(xì)介紹

    最近在學(xué)習(xí)maven,這篇文章主要介紹了maven中pom.xml詳細(xì)介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Mybatis中單雙引號(hào)引發(fā)的慘案及解決

    Mybatis中單雙引號(hào)引發(fā)的慘案及解決

    這篇文章主要介紹了Mybatis中單雙引號(hào)引發(fā)的慘案及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • IDEA的Project無(wú)法正常顯示的問(wèn)題解決

    IDEA的Project無(wú)法正常顯示的問(wèn)題解決

    本文主要介紹了IDEA的Project無(wú)法正常顯示的問(wèn)題解決,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Java中try-catch的使用及注意細(xì)節(jié)

    Java中try-catch的使用及注意細(xì)節(jié)

    現(xiàn)在有很多的語(yǔ)言都支持try-catch,比如常見(jiàn)的就是c++,java等,這篇文章主要給大家介紹了關(guān)于Java中try-catch的使用及注意細(xì)節(jié)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Java基礎(chǔ)教程之類型轉(zhuǎn)換與多態(tài)

    Java基礎(chǔ)教程之類型轉(zhuǎn)換與多態(tài)

    這篇文章主要介紹了Java基礎(chǔ)教程之類型轉(zhuǎn)換與多態(tài),本文講解了 基本類型轉(zhuǎn)換、 upcast與多態(tài)、 Object類等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • MyBatis的動(dòng)態(tài)攔截sql并修改

    MyBatis的動(dòng)態(tài)攔截sql并修改

    因工作需求,需要根據(jù)用戶的數(shù)據(jù)權(quán)限,來(lái)查詢并展示相應(yīng)的數(shù)據(jù),那么就需要?jiǎng)討B(tài)攔截sql,本文就來(lái)介紹了MyBatis的動(dòng)態(tài)攔截sql并修改,感興趣的可以了解一下
    2023-11-11

最新評(píng)論