亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringBoot與Quartz集成實現分布式定時任務集群的代碼實例

2024-07-14 08:43:40
字體:
來源:轉載
供稿:網友

Spring Boot與Quartz集成實現分布式定時任務集群

直接貼代碼

POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>test.daemon</groupId>  <artifactId>clusterquartz</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>clusterquartz</name>  <url>http://maven.apache.org</url>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.4.1.RELEASE</version>    <relativePath />  </parent>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>    <java.version>1.8</java.version>  </properties>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-jdbc</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-logging</artifactId>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context-support</artifactId>    </dependency>    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>    </dependency>    <dependency>      <groupId>com.alibaba</groupId>      <artifactId>druid</artifactId>      <version>1.0.13</version>    </dependency>    <dependency>      <groupId>com.h2database</groupId>      <artifactId>h2</artifactId>    </dependency>    <dependency>      <groupId>org.quartz-scheduler</groupId>      <artifactId>quartz</artifactId>      <version>2.2.1</version>    </dependency>    <dependency>      <groupId>org.quartz-scheduler</groupId>      <artifactId>quartz-jobs</artifactId>      <version>2.2.1</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <scope>test</scope>    </dependency>  </dependencies></project>

application.yml

server: port: 80spring: datasource:  url: jdbc:mysql://localhost:3306/quartz  username: admin  password: admin  driver-class-name: com.mysql.jdbc.Driver

quartz.properties

#============================================================================# Configure JobStore# Using Spring datasource in SchedulerConfig.java# Spring uses LocalDataSourceJobStore extension of JobStoreCMT#============================================================================org.quartz.jobStore.useProperties=falseorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.isClustered = trueorg.quartz.jobStore.clusterCheckinInterval = 5000org.quartz.jobStore.misfireThreshold = 60000org.quartz.jobStore.txIsolationLevelReadCommitted = trueorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate#============================================================================# Configure Main Scheduler Properties# Needed to manage cluster instances#============================================================================org.quartz.scheduler.instanceName = ClusterQuartzorg.quartz.scheduler.instanceId= AUTOorg.quartz.scheduler.rmi.export = falseorg.quartz.scheduler.rmi.proxy = falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction = false#============================================================================# Configure ThreadPool# Can also be configured in spring configuration#============================================================================#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool#org.quartz.threadPool.threadCount = 5#org.quartz.threadPool.threadPriority = 5#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

Spring配置類

package test.daemon.clusterquartz.config;import java.io.IOException;import java.util.Properties;import java.util.concurrent.Executor;import javax.sql.DataSource;import org.quartz.Scheduler;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.config.PropertiesFactoryBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.ClassPathResource;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import test.daemon.clusterquartz.quartz.QuartzJob;@Configurationpublic class SchedulerConfig {  @Autowired  private DataSource dataSource;  @Bean  public Scheduler scheduler() throws Exception {    Scheduler scheduler = schedulerFactoryBean().getScheduler();    scheduler.start();    return scheduler;  }  @Bean  public SchedulerFactoryBean schedulerFactoryBean() throws IOException {    SchedulerFactoryBean factory = new SchedulerFactoryBean();    factory.setSchedulerName("Cluster_Scheduler");    factory.setDataSource(dataSource);    factory.setApplicationContextSchedulerContextKey("applicationContext");    factory.setTaskExecutor(schedulerThreadPool());    factory.setTriggers(trigger1().getObject());    factory.setQuartzProperties(quartzProperties());    return factory;  }  @Bean  public Properties quartzProperties() throws IOException {    PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();    propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));    // 在quartz.properties中的屬性被讀取并注入后再初始化對象    propertiesFactoryBean.afterPropertiesSet();    return propertiesFactoryBean.getObject();  }  @Bean  public JobDetailFactoryBean job1() {    JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();    jobDetailFactoryBean.setJobClass(QuartzJob.class);    jobDetailFactoryBean.setDurability(true);    jobDetailFactoryBean.setRequestsRecovery(true);    return jobDetailFactoryBean;  }  @Bean  public CronTriggerFactoryBean trigger1() {    CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();    cronTriggerFactoryBean.setJobDetail(job1().getObject());    cronTriggerFactoryBean.setCronExpression("0/3 * * * * ?");    return cronTriggerFactoryBean;  }  @Bean  public Executor schedulerThreadPool() {    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();    executor.setCorePoolSize(15);    executor.setMaxPoolSize(25);    executor.setQueueCapacity(100);    return executor;  }}

Quartz job類

package test.daemon.clusterquartz.quartz;import java.util.Date;import org.quartz.DisallowConcurrentExecution;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.PersistJobDataAfterExecution;import org.springframework.scheduling.quartz.QuartzJobBean;@PersistJobDataAfterExecution@DisallowConcurrentExecutionpublic class QuartzJob extends QuartzJobBean {  @Override  protected void executeInternal(JobExecutionContext context) throws JobExecutionException {    // TODO Auto-generated method stub    System.out.println("/nQuartz job " + new Date());  }}

Spring Boot啟動類

package test.daemon.clusterquartz;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Cluster {  public static void main(String[] args) throws Exception {    SpringApplication.run(Cluster.class, args);  }}

數據庫sql

可以在Quartz的lib中找到適當的數據庫生成文件來創建jdbc job store所需要的表。這些表用于Quartz在集群環境中的調度。

一些解釋

把項目復制一份,然后改掉spring server的啟動端口,啟動多個項目,可以觀察到只有一個項目的Quartz在運行。如果當前運行Quartz的服務器掛掉,另一臺會跟進執行相同的Quartz任務。

有待思考的部分

在Quartz集群環境中,時間的同步是一個重要問題,有時間需要去看一下怎么進行時間同步來確保集群的正確性。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区欧美二区三区| 在线观看精品国产视频| 91干在线观看| 亚洲美女激情视频| 亚洲最新av在线网站| 久久久亚洲国产天美传媒修理工| 亚洲片在线资源| 欧美视频一区二区三区…| 亚洲va欧美va国产综合久久| 日韩欧美精品网址| 日韩成人激情在线| 欧美中文字幕在线| 欧美性猛交99久久久久99按摩| 国产suv精品一区二区三区88区| 国产精品视频成人| 国产精品第2页| 亚洲国产精久久久久久| 欧美在线免费看| 欧美xxxx综合视频| 日韩久久免费视频| 日韩av电影在线免费播放| 97婷婷大伊香蕉精品视频| 久久夜色精品亚洲噜噜国产mv| 国产丝袜一区二区三区| 在线观看国产成人av片| 另类色图亚洲色图| 国产精品午夜一区二区欲梦| 亚洲国产一区二区三区四区| 久久成人国产精品| 日韩中文第一页| 国产精品久久久久av| 欧美黑人巨大精品一区二区| 国产91精品在线播放| 欧美性猛交xxxx久久久| 国产一区二区三区视频在线观看| 日本国产高清不卡| 日韩亚洲在线观看| 在线视频欧美性高潮| 国产精品免费久久久久久| 亚洲精品456在线播放狼人| 91亚洲人电影| 欧美激情精品久久久久久大尺度| 91色琪琪电影亚洲精品久久| 国产亚洲精品久久久| 91免费在线视频网站| 91午夜理伦私人影院| 国产精品久久久久久久久免费看| 精品日本高清在线播放| 91青草视频久久| 日韩精品极品毛片系列视频| 欧美日韩加勒比精品一区| 精品视频偷偷看在线观看| 欧美高清视频免费观看| 国产成人精品视| 中文.日本.精品| 91九色视频导航| 国产精品极品美女粉嫩高清在线| 日韩激情视频在线播放| 久久国产精品影视| 91精品国产91久久久久久吃药| 91香蕉嫩草神马影院在线观看| 亚洲丝袜av一区| 亚洲成人精品视频在线观看| 午夜精品福利在线观看| 一区二区三区视频在线| 亚洲第一av网| 操人视频在线观看欧美| 2019中文字幕在线观看| 丝袜美腿精品国产二区| 亚洲第一av网站| 欧美美女操人视频| 亚洲精品久久在线| 欧美成人中文字幕在线| 亚洲三级黄色在线观看| 日韩久久精品成人| 欧美肥老太性生活视频| 欧美激情视频免费观看| 久久伊人精品视频| 欧美肥臀大乳一区二区免费视频| 国产精品福利小视频| 这里只有精品在线观看| 欧美激情a在线| 91精品久久久久久综合乱菊| 精品国内亚洲在观看18黄| 国产视频精品自拍| 国产成人福利夜色影视| 久久影视三级福利片| 青青a在线精品免费观看| 国产欧美精品一区二区三区-老狼| 中文字幕精品久久久久| 136fldh精品导航福利| 国产精品亚洲一区二区三区| 亚洲jizzjizz日本少妇| 国产精品久久久久久久久久尿| 大胆欧美人体视频| 成人欧美一区二区三区黑人孕妇| 日韩性生活视频| 久久久久久久久久久91| 亚洲电影免费观看高清完整版| 久久久久这里只有精品| 一本一本久久a久久精品综合小说| 久久久999国产精品| 国产视频精品自拍| 久久视频精品在线| 国产成人久久久精品一区| 91精品国产高清| 久久久久久综合网天天| 久久久91精品国产| 国产成人精品一区二区| 久久久久久国产精品久久| 最新69国产成人精品视频免费| 国产精品一区二区3区| 欧美成人h版在线观看| 国产精品久久久久久超碰| 在线观看日韩av| 国产精品入口日韩视频大尺度| 亚洲最大福利视频网| 亚洲午夜性刺激影院| 亚洲天堂av网| 日韩中文字幕免费看| 国内外成人免费激情在线视频网站| 欧美激情第99页| 国产精品亚发布| 国产精品久久久999| 精品久久久久久久大神国产| 国产日韩欧美中文| 欧美怡春院一区二区三区| 久久亚洲电影天堂| 成人欧美一区二区三区黑人| 色噜噜久久综合伊人一本| 日韩高清免费观看| 日韩美女激情视频| 久久九九亚洲综合| 亚洲国产古装精品网站| 国产99视频精品免视看7| 亚洲成年人影院在线| 欧美日韩亚洲精品一区二区三区| 午夜精品久久久久久久白皮肤| 亚洲91av视频| 色偷偷偷综合中文字幕;dd| 久久久久久久97| 伊人久久精品视频| 国产在线视频一区| 米奇精品一区二区三区在线观看| 欧美极品xxxx| 欧美乱妇高清无乱码| 久久国产精品久久国产精品| 日韩中文字幕亚洲| 欧美老女人xx| www.色综合| 久久精品国产亚洲精品| 国产有码一区二区| 国语自产精品视频在线看抢先版图片| 亚洲人在线视频| 精品一区二区三区四区在线| 懂色av影视一区二区三区| www.色综合| 中文字幕日韩欧美| www国产亚洲精品久久网站| 国产亚洲欧美视频| 欧美日韩在线视频观看| 国产精品自产拍高潮在线观看| 国产精品av在线| 国产成人免费av|