最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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設(shè)計模式-單例模式實現(xiàn)方法詳解

    java設(shè)計模式-單例模式實現(xiàn)方法詳解

    單例模式,屬于創(chuàng)建類型的一種常用的軟件設(shè)計模式。通過單例模式的方法創(chuàng)建的類在當前進程中只有一個實例(根據(jù)需要,也有可能一個線程中屬于單例
    2021-07-07
  • 踩坑批量更新sql報錯,實際sql能夠正常執(zhí)行的問題

    踩坑批量更新sql報錯,實際sql能夠正常執(zhí)行的問題

    在項目工程遷移過程中,遇到了一個批量更新接口在新工程中報錯的問題,通過分析,排除了代碼錯誤的可能,最終發(fā)現(xiàn)是由于數(shù)據(jù)庫連接配置不當導致的,在jdbc連接字符串中加入allowMultiQueries=true參數(shù)后,問題得以解決,這個參數(shù)的作用是允許SQL批量執(zhí)行
    2022-12-12
  • 使用IDEA開發(fā)配置Java Web的初始化過程

    使用IDEA開發(fā)配置Java Web的初始化過程

    該教程使用idea開發(fā)工具初始化javaweb項目,該運行在tomcat服務器上通過配置項目環(huán)境變量保證tomcat正常啟動,具體操作配置教程參考下本文
    2021-06-06
  • Java 小游戲開發(fā)之俄羅斯方塊

    Java 小游戲開發(fā)之俄羅斯方塊

    這篇文章主要介紹了Java 小游戲開發(fā)之俄羅斯方塊的相關(guān)資料,這里實現(xiàn)俄羅斯方塊的實例和實現(xiàn)效果給大家看下,學習java基礎(chǔ)的朋友的好資料,需要的朋友可以參考下
    2017-07-07
  • 一篇文章帶你深入了解Java封裝

    一篇文章帶你深入了解Java封裝

    Java中的封裝是將數(shù)據(jù)(變量)和作用于數(shù)據(jù)(方法)的代碼作為一個單元包裝在一起的機制。 在封裝中,類的變量將從其他類隱藏,并且只能通過當前類的方法訪問
    2021-08-08
  • Spring?boot整合jsp和tiles模板示例

    Spring?boot整合jsp和tiles模板示例

    這篇文章主要介紹了Spring?boot整合jsp模板和tiles模板的示例演示過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Java數(shù)據(jù)脫敏實現(xiàn)的方法總結(jié)

    Java數(shù)據(jù)脫敏實現(xiàn)的方法總結(jié)

    數(shù)據(jù)脫敏,指的是對某些敏感信息通過脫敏規(guī)則進行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護,本文主要是對后端數(shù)據(jù)脫敏實現(xiàn)的簡單總結(jié),希望對大家有所幫助
    2023-07-07
  • Java調(diào)用第三方接口示范的實現(xiàn)

    Java調(diào)用第三方接口示范的實現(xiàn)

    這篇文章主要介紹了Java調(diào)用第三方接口示范的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 一文帶你了解微服務架構(gòu)中的"發(fā)件箱模式"

    一文帶你了解微服務架構(gòu)中的"發(fā)件箱模式"

    微服務架構(gòu)如今非常的流行,這個架構(gòu)下可能經(jīng)常會遇到“雙寫”的場景。本文就和大家分享一個“發(fā)件箱模式”,?感興趣的小伙伴可以了解一下
    2023-01-01
  • Java重寫與重載之間的區(qū)別

    Java重寫與重載之間的區(qū)別

    本文主要介紹了Java重寫與重載之間的區(qū)別。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論

富川| 汝城县| 永年县| 仁化县| 大新县| 宝兴县| 祁东县| 丰宁| 西和县| 溧水县| 衢州市| 镇坪县| 广平县| 平顺县| 定襄县| 隆林| 通化市| 黑龙江省| 彭州市| 吴忠市| 莫力| 容城县| 凤冈县| 盐亭县| 武山县| 五家渠市| 绿春县| 攀枝花市| 江永县| 登封市| 肇州县| 双柏县| 溧水县| 沅江市| 徐闻县| 盐城市| 西畴县| 平定县| 开平市| 龙川县| 徐州市|