java手写分布式定时任务_java相关:SpringBoot与Quartz集成实现分布式定时任务集群的代码实例...

java相关:SpringBoot与Quartz集成实现分布式定时任务集群的代码实例

发布于 2020-4-8|

复制链接

分享一篇关于关于SpringBoot与Quartz集成实现分布式定时任务集群的代码实例,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小妖来看看吧

Spring Boot与Quartz集成实现分布式定时任务集群直接贴代码POM

```xml

4.0.0

test.daemon

clusterquartz

0.0.1-SNAPSHOT

jar

clusterquartz

http://maven.apache.org

org.springframework.boot

spring-boot-starter-parent

1.4.1.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-jdbc

org.springframework.boot

spring-boot-starter-logging

org.springframework

spring-context-support

mysql

mysql-connector-java

com.alibaba

druid

1.0.13

com.h2database

h2

org.quartz-scheduler

quartz

2.2.1

org.quartz-scheduler

quartz-jobs

2.2.1

junit

junit

test

```

application.yml

```java

server:

port: 80

spring:

datasource:

url: jdbc:mysql://localhost:3306/quartz

username: admin

password: admin

driver-class-name: com.mysql.jdbc.Driver

```

quartz.properties

```sql

#============================================================================

# Configure JobStore

# Using Spring datasource in SchedulerConfig.java

# Spring uses LocalDataSourceJobStore extension of JobStoreCMT

#============================================================================

org.quartz.jobStore.useProperties=false

org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true

org.quartz.jobStore.clusterCheckinInterval = 5000

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.txIsolationLevelReadCommitted = true

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

#============================================================================

# Configure Main Scheduler Properties

# Needed to manage cluster instances

#============================================================================

org.quartz.scheduler.instanceName = ClusterQuartz

org.quartz.scheduler.instanceId= AUTO

org.quartz.scheduler.rmi.export = false

org.quartz.scheduler.rmi.proxy = false

org.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配置类

```java

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;

@Configuration

public 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类

```java

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

@DisallowConcurrentExecution

public 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启动类

```java

package test.daemon.clusterquartz;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class Cluster {

public static void main(String[] args) throws Exception {

SpringApplication.run(Cluster.class, args);

}

}

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值