分布式批处理框架 – spring boot quartz 集群

主要内容

分布式批处理框架, 采用 spring boot
2, quartz
2 集群

本文以 spring boot
V2.2.5 版本为例说明。

更新历史

依赖

POM文件大体如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
</parent>


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

配置

spring:
  quartz:
    job-store-type: jdbc
    jdbc:
      initialize-schema: never/embedded/always   # 第一次必须使用 always, 生成表
    properties:
      org:
        quartz:
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            clusterCheckinInterval: 5000
            tablePrefix: QRTZ_  # 辅助表, 表名开头
            isClustered: true # 打开集群模式
          scheduler:
            instanceId: AUTO
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true

样例代码

  • job

    package com.mandalat.ehealth.job;
    
    import cc.giveme5.common.service.ComSystemParameterService;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    
    import java.time.LocalDateTime;
    
    public class AJob implements Job {
    
        @Autowired
        private ComSystemParameterService parameterService;
    
        @Value("${server.port}")
        private String port;
    
        @Override
        public void execute(JobExecutionContext context) {
            parameterService.findAll();
    
            System.out.println(port + "--------------------" + LocalDateTime.now());
        }
    }
    

  • job config

    package com.mandalat.ehealth.common.config;
    
    import com.mandalat.ehealth.job.AJob;
    import org.quartz.*;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class JobConfiguration {
        @Bean
        public JobDetail jobADetails() {
            return JobBuilder.newJob(AJob.class).withIdentity("sampleJobA")
                    .storeDurably().build();
        }
    
        @Bean
        public Trigger jobATrigger() {
    
            return TriggerBuilder.newTrigger()
    
                    .forJob(jobADetails())
                    .withIdentity("sampleTriggerA")
                    .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * ? * * *"))
    
    
                    .build();
        }
    }
    

测试

分别在 8080 和 8081 上 启动服务;

可以看到只有一台服务调用到了 AJob
中的方法;

把这台服务关闭, 5秒后可以看到另一台服务调用到了 AJob
中的方法;

说明Quartz 的集群分布式部署成功.

原文 

http://giveme5.cc/2020/03/30/spring/springbootquartzs/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 分布式批处理框架 – spring boot quartz 集群

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址