麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蜜桃成品人免费视频 | 国产69精品久久久久孕妇黑 | 在线播放一区二区三区 | av电影在线免费 | 国产一级做a爰片在线看 | 久久另类视频 | 91在线视频免费观看 | 国产日韩线路一线路二 | 99精品国产小情侣高潮露脸在线 | 亚洲国产网站 | 亚洲午夜久久久久 | 国产亚洲综合一区二区 | 5xx免费看| av在线播放电影 | 天天躁狠狠躁夜躁2020挡不住 | 国产欧美精品综合一区 | v片在线看| 7777在线观看 | 黄视频免费在线 | 久久精品欧美一区二区三区不卡 | 成人一级视频 | 成人aaaa免费全部观看 | 国产一级爱c视频 | a级在线 | 久久一本日日摸夜夜添 | 一区国产在线观看 | 韩国一级免费视频 | 午夜视频福利 | 久久色伦理资源站 | 福利在线小视频 | 男女一边摸一边做羞羞视频免费 | 精品一区二区三区在线观看国产 | 国产1区2区3区中文字幕 | 日本a∨精品中文字幕在线 狠狠干精品视频 | 99re色 | 国产毛片毛片毛片 | 污污黄 | 色综合久久久久久久久久久 | 免费国产自久久久久三四区久久 | 欧美成人免费看 | 免费看真人a一级毛片 |