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

Springboot中spring-boot-starter-quartz的使用及說明

 更新時間:2022年12月13日 09:48:05   作者:AlphaSZH  
這篇文章主要介紹了Springboot中spring-boot-starter-quartz的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言

在做定時任務時,有需求是把定時執(zhí)行cron表達式存在數(shù)據(jù)庫中,通過更改數(shù)據(jù)庫中的值,來改變?nèi)蝿請?zhí)行的頻率。

一、添加pom.xml依賴

<!--定時器依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

<!--mybatis插件-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

<!--數(shù)據(jù)庫連接插件-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
    <scope>runtime</scope>
</dependency>

二、application.properties添加數(shù)據(jù)庫信息

spring.datasource.url:jdbc:mysql://localhost:3306/test?setUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username:root
spring.datasource.password:root

三、數(shù)據(jù)庫操作

1.創(chuàng)建數(shù)據(jù)庫test和表cron

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for cron
-- ----------------------------
DROP TABLE IF EXISTS `cron`;
CREATE TABLE `cron`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of cron
-- ----------------------------
INSERT INTO `cron` VALUES (1, '0/5 * * * * ? *');

cron表:


cron表

2.創(chuàng)建cron表對應的實體類

public class CronModel {
    private String cron;

    public String getCron() {
        return cron;
    }

    public void setCron(String cron) {
        this.cron = cron;
    }
}

3.創(chuàng)建Mapper

@Mapper
public interface CronModelMapper {
    @Select("select cron from cron where id = 1")
    String getCron();
}

4.創(chuàng)建Service

@Service
public class CronModelService {
    @Autowired
    CronModelMapper cronModelMapper;

    public String getCron() {
        return cronModelMapper.getCron();
    }
}

二、Quartz相關(guān)

1.創(chuàng)建JobConfig類

/**
 * Quartz的相關(guān)配置,注冊JobDetail和Trigger
 * 注意JobDetail和Trigger是org.quartz包下的,不是spring包下的,不要導入錯誤
 */
@Configuration
public class JobConfig {

    @Autowired
    CronModelService cronModelService;

    @Bean
    public JobDetail jobDetail() {
        JobDetail jobDetail = JobBuilder.newJob(Job.class)
                .withIdentity("jobDetail", "jobDetail")
                .storeDurably()
                .build();
        return jobDetail;
    }

    @Bean
    public Trigger trigger() {
        Trigger trigger = TriggerBuilder.newTrigger()
                .forJob(jobDetail())
                .withIdentity("trigger", "trigger")
                .startNow()
                // 每天0點執(zhí)行
                .withSchedule(CronScheduleBuilder.cronSchedule(cronModelService.getCron()))
                .build();
        return trigger;
    }
}

2.創(chuàng)建Job類

@Component
public class Job extends QuartzJobBean {

    Logger logger = LoggerFactory.getLogger(Job.class);

    @Autowired
    CronModelService cronModelService;

    @Autowired
    private Scheduler scheduler;

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) {
        logger.info("執(zhí)行");
        Trigger trigger = jobExecutionContext.getTrigger();
        String cron = cronModelService.getCron();

        try {
            CronTrigger cronTrigger = (CronTrigger)
                    scheduler.getTrigger(trigger.getKey());
            String cronExpression = cronTrigger.getCronExpression();
            if (!cron.equals(cronExpression)) {
                //創(chuàng)建表達式調(diào)度器
                CronScheduleBuilder cronSchedule =
                        CronScheduleBuilder.cronSchedule(cron);
                //重構(gòu)
                cronTrigger = cronTrigger.getTriggerBuilder()
                        .withIdentity(trigger.getKey())
                        .withSchedule(cronSchedule)
                        .build();
                scheduler.rescheduleJob(trigger.getKey(), cronTrigger);
            }
        } catch (SchedulerException e) {
            e.printStackTrace();
        }

    }
}

總結(jié)

和之前引入quartz包(參考Quartz文檔)不同之處在于,之前是要先定義好JobTrigger,然后通過Scheduler去綁定他們,最后去執(zhí)行start來開啟定時任務。

spring-boot-starter-quartz則省去了JobTrigger的手動綁定(參考鏈接: SpringBoot官方文檔),也就是做好2.1配置即可。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java AQS中ReentrantReadWriteLock讀寫鎖的使用

    Java AQS中ReentrantReadWriteLock讀寫鎖的使用

    ReentrantReadWriteLock稱為讀寫鎖,它提供一個讀鎖,支持多個線程共享同一把鎖。這篇文章主要講解一下ReentrantReadWriteLock的使用和應用場景,感興趣的可以了解一下
    2023-02-02
  • Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了如何利用Java語言編寫一個圖書管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下
    2022-03-03
  • Java如何獲取對象屬性及對應值

    Java如何獲取對象屬性及對應值

    這篇文章主要介紹了Java如何獲取對象屬性及對應值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • SpringCloud?Gateway詳細分析實現(xiàn)負載均衡與熔斷和限流

    SpringCloud?Gateway詳細分析實現(xiàn)負載均衡與熔斷和限流

    這篇文章主要介紹了SpringCloud?Gateway實現(xiàn)路由轉(zhuǎn)發(fā),負載均衡,熔斷和限流,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Java+Selenium設(shè)置元素等待的方法詳解

    Java+Selenium設(shè)置元素等待的方法詳解

    本文主要介紹如何使用java代碼利用Selenium操作瀏覽器,某些網(wǎng)頁元素加載慢,如何操作元素就會把找不到元素的異常,此時需要設(shè)置元素等待,等待元素加載完,再操作,感興趣的可以了解一下
    2023-01-01
  • openjdk與Oraclejdk的區(qū)別

    openjdk與Oraclejdk的區(qū)別

    這篇文章主要介紹了openjdk與Oraclejdk的區(qū)別,幫助大家更好的了解JAVA,感興趣的朋友可以了解下
    2020-08-08
  • 詳解java中的阻塞隊列

    詳解java中的阻塞隊列

    這篇文章主要介紹了java中的阻塞隊列的相關(guān)知識,文中代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • java this super使用方法詳解

    java this super使用方法詳解

    Java中this、super關(guān)鍵字的用法簡單說明:super是Java語言的保留字,用來指向類的超類,本文將詳細介紹,需要的朋友可以參考下
    2012-12-12
  • Java中文件的讀寫方法之IO流詳解

    Java中文件的讀寫方法之IO流詳解

    這篇文章主要介紹了Java中文件的讀寫方法之IO流詳解,本文中的代碼所涉及到的路徑或者文件都是本人的,大家得換成自己的,并且大家可以在網(wǎng)上自行找一些材料作為讀入或者寫入的材料,不過路徑最好是英文的,不要包含中文,防止JVM讀取失敗
    2022-04-04
  • Spring中的@PostConstruct注解使用方法解析

    Spring中的@PostConstruct注解使用方法解析

    這篇文章主要介紹了Spring中的@PostConstruct注解使用方法解析,@PostConstruct注解是用來處理在@Autowired注入屬性后init()方法之前,對一些零散的屬性進行賦值的注解,需要的朋友可以參考下
    2023-11-11

最新評論