亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例

 更新時間:2023年09月20日 10:39:57   作者:CD4356  
這篇文章主要介紹了Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例,任務(wù)是有可能并發(fā)執(zhí)行的,若Scheduler直接使用Job,就會存在對同一個Job實例并發(fā)訪問的問題,而JobDetail?&?Job方式,Scheduler都會根據(jù)JobDetail創(chuàng)建一個新的Job實例,這樣就可以規(guī)避并發(fā)訪問問題

Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例

Quartz是一款功能強大的任務(wù)調(diào)度器,Quartz有兩個比較核心的組件:Job 和 Trigger。

Quartz的三個基本要素

  • Scheduler:調(diào)度器,所有的調(diào)度都是由它來控制。
  • Trigger:觸發(fā)器,決定什么時候執(zhí)行任務(wù)
  • JobDetail & Job:JobDetail定義的是任務(wù)數(shù)據(jù),而真正執(zhí)行邏輯是在Job中。任務(wù)是有可能并發(fā)執(zhí)行的,若Scheduler直接使用Job,就會存在對同一個Job實例并發(fā)訪問的問題。而JobDetail & Job方式,Scheduler都會根據(jù)JobDetail創(chuàng)建一個新的Job實例,這樣就可以規(guī)避并發(fā)訪問問題

Spring Boot自帶定時任務(wù),默認(rèn)是單線程

1. 使用spring boot自帶定時任務(wù)無需添加相關(guān)依賴包

2. 在啟動類上添加 @EnableScheduling 注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class O2o2Application {
    public static void main(String[] args) {
        SpringApplication.run(O2o2Application.class, args);
        System.out.println("項目啟動成功!");
    }
}

3. 在方法上標(biāo)注 @Scheduled 注解,指定該方法作為定時任務(wù)運行的方法。并通過cron屬性設(shè)置cron表達(dá)式,來指定定時任務(wù)的執(zhí)行時間

import com.cd.o2o2.dao.ProductSellDailyDao;
import com.cd.o2o2.service.ProductSellDailyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
@Service("productSellDailyService")
public class ProductSellDailyServiceImpl implements ProductSellDailyService {
	@Override
    @Scheduled(cron = "0/2 * * * * ?") //定時任務(wù)運行的方法
    public void demo1() {
        SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(dataFormat.format(new Date()) + "  Quartz Running!");
    }
	@Override
    @Scheduled(cron = "0/5 * * * * ?") //定時任務(wù)運行的方法
    public void demo2() {
        SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("\n當(dāng)前執(zhí)行時間: " + dataFormat.format(new Date()) + "\n");
    }
}

啟動SpringBoot,查看控制臺打印信息! demo1()每2秒定時運行一次,demo2()每5秒定時運行一次 cd4356

如果不想使用Spring Boot自帶的定時任務(wù),則需要添加quartz相關(guān)依賴包

pom.xml

<!--定時組件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

Quartz配置類(Job的定義有兩種方式,分別為JobDetailFactoryBean和MethodInvokingJobDetailFactoryBean,下面使用MethodInvokingJobDetailFactoryBean類來定義job)

package com.cd.o2o2.config.quartz;
import com.cd.o2o2.service.ProductSellDailyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
@Configuration //標(biāo)注@Configuration的類,相當(dāng)于一個xml配置文件
public class QuartzConfiguration {
    @Autowired
    private ProductSellDailyService productSellDailyService;
    @Autowired
    private MethodInvokingJobDetailFactoryBean jobDetailFactory;
    @Autowired
    private CronTriggerFactoryBean cronTriggerFactory;
    /**
     * 配置jobDetail作業(yè)類
     * @return
     */
    @Bean(name = "jobDetailFactory") //標(biāo)注@Bean后表明返回對象會被當(dāng)做一個Bean注冊到Spring IoC容器
    public MethodInvokingJobDetailFactoryBean createJobDetail(){
        MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
        //指定任務(wù)名稱
        jobDetailFactoryBean.setName("product_sell_daily_job");
        //指定組名稱
        jobDetailFactoryBean.setGroup("job_product_sell_daily_group");
        /*
          對于同一個JobDetail,當(dāng)指定多個trigger時,很可能第一個job完成之前,第二個job就開始了
          指定concurrent屬性為false,多個job就會串行執(zhí)行,而不會并發(fā)執(zhí)行,即第一個job完成前,第二個job不會開啟
         */
        jobDetailFactoryBean.setConcurrent(false);
        //指定具體的job任務(wù)類
        jobDetailFactoryBean.setTargetObject(productSellDailyService);
        //指定運行任務(wù)的方法
        jobDetailFactoryBean.setTargetMethod("dailyCalculate");
        return jobDetailFactoryBean;
    }
    /**
     * 配置cronTrigger觸發(fā)器(作業(yè)調(diào)度的方式)
     * @return
     */
    @Bean(name = "cronTriggerFactory")
    public CronTriggerFactoryBean createProductSellDailyTrigger(){
        CronTriggerFactoryBean triggerFactory = new CronTriggerFactoryBean();
        //指定trigger的名稱
        triggerFactory.setName("product_sell_daily_trigger");
        //指定trigger的組名
        triggerFactory.setGroup("job_product_sell_daily_group");
        //指定trigger綁定的job
        triggerFactory.setJobDetail(jobDetailFactory.getObject());
        //設(shè)置cron表達(dá)式,每天凌晨定時運行(通過在線Cron表達(dá)式生成器來生成)
        triggerFactory.setCronExpression("0/2 * * * * ?");
        return triggerFactory;
    }
    /**
     * 配置scheduler調(diào)度工廠
     * @return
     */
    @Bean
    public SchedulerFactoryBean createScheduler(){
        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
        //綁定cronTrigger
        schedulerFactory.setTriggers(cronTriggerFactory.getObject());
        return schedulerFactory;
    }
}

dailyCalculate()方法,是定時任務(wù)運行的方法

package com.cd.o2o2.service.impl;
import com.cd.o2o2.service.ProductSellDailyService;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service("productSellDailyService")
public class ProductSellDailyServiceImpl implements ProductSellDailyService {
    /**
     * 定時任務(wù)運行的方法
     */
    @Override
    public void dailyCalculate() {
        System.out.println(new Date()+": Quartz Running!");
    }
}

啟動SpringBoot,查看控制臺打印信息!dailyCalculate()方法每2秒定時運行一次

cd4356

Cron表達(dá)式示例

cd4356

到此這篇關(guān)于Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例的文章就介紹到這了,更多相關(guān)Springboot定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java SSM整合開發(fā)統(tǒng)一結(jié)果封裝詳解

    Java SSM整合開發(fā)統(tǒng)一結(jié)果封裝詳解

    這篇文章主要介紹了Java SSM整合開發(fā)實現(xiàn)統(tǒng)一結(jié)果封裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Lombok插件的安裝與簡單使用步驟

    Lombok插件的安裝與簡單使用步驟

    這篇文章主要介紹了Lombok插件的安裝與簡單使用步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Retrofit+Rxjava下載文件進(jìn)度的實現(xiàn)

    Retrofit+Rxjava下載文件進(jìn)度的實現(xiàn)

    這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實現(xiàn),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • Mybatis實現(xiàn)動態(tài)SQL編寫詳細(xì)代碼示例

    Mybatis實現(xiàn)動態(tài)SQL編寫詳細(xì)代碼示例

    這篇文章主要為大家詳細(xì)介紹了Mybatis中動態(tài)SQL的編寫使用,動態(tài)SQL技術(shù)是一種根據(jù)特定條件動態(tài)拼裝SQL語句的功能,它存在的意義是為了解決拼接SQL語句字符串時的痛點問題,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 如何實現(xiàn)nohup?java進(jìn)程號一直在變方法步驟詳解

    如何實現(xiàn)nohup?java進(jìn)程號一直在變方法步驟詳解

    這篇文章主要為大家介紹了如何實現(xiàn)nohup?java進(jìn)程號一直在變方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java中的synchronized和ReentrantLock的區(qū)別詳細(xì)解讀

    Java中的synchronized和ReentrantLock的區(qū)別詳細(xì)解讀

    這篇文章主要介紹了Java中的synchronized和ReentrantLock的區(qū)別詳細(xì)解讀,synchronized是Java內(nèi)建的同步機制,所以也有人稱其為 IntrinsicLocking,它提供了互斥的語義和可見性,當(dāng)一個線程已經(jīng)獲取當(dāng)前鎖時,其他試圖獲取的線程只能等待或者阻塞在那里,需要的朋友可以參考下
    2024-01-01
  • 使用@value注解取不到application.xml配置文件中的值問題

    使用@value注解取不到application.xml配置文件中的值問題

    這篇文章主要介紹了使用@value注解取不到application.xml配置文件中的值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • MyBatis-Plus與Druid結(jié)合Dynamic-datasource實現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例

    MyBatis-Plus與Druid結(jié)合Dynamic-datasource實現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例

    Dynamic-DataSource 可以和絕大多是連接層插件搭配使用,比如:mybatis,mybatis-plus,hibernate等,本文就來介紹一下MyBatis-Plus與Druid結(jié)合Dynamic-datasource實現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例,感興趣的可以了解一下
    2023-10-10
  • Java面試題沖刺第三天--集合框架篇

    Java面試題沖刺第三天--集合框架篇

    這篇文章主要為大家分享了最有價值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java實現(xiàn)學(xué)生管理系統(tǒng)(IO版)

    Java實現(xiàn)學(xué)生管理系統(tǒng)(IO版)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論