栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

不会还有人不知道Spring可以整合Quartz吧(详细介绍)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

不会还有人不知道Spring可以整合Quartz吧(详细介绍)

JDK和Spring线程池对于解决定时任务的问题

首先咱先来了解一下JDK和Spring线程池对于解决定时任务的问题

在分布式服务器的情况下,每台服务器代码一致,当有controller请求时,会只有一台服务器进行处理,但是在定时任务的情况下,每台服务器都会进行定时任务,程序运行的参数存在内存当中,每台服务器的信息不能共享,不知道其他服务器正在干什么,所以说此时系统就会出现问题。

所以才采取Quartz进行解决定时任务的问题

使用Quartz的时候,程序运行的参数会存在数据库当中,因为数据只有一个,当一台服务器进行访问数据当中的任务参数时,如果任务显示是正在等待中,该服务器会进行任务处理,也会随之将任务状态修改为正在处理当中,当其他服务器访问数据库时,数据库中会显示任务正在运行,此时其他服务器就不会进行此任务处理

通过共享数据来处理定时任务

Spring整合Quartz 

1、添加依赖


    org.springframework.boot
    spring-boot-starter-quartz

 2、由于Quartz是依据数据库中的数据,所以要在数据库当中添加Quartz官方定义的表

3、Quartz 几个核心接口

Scheduler--所有由quartz调度的任务都是通过此接口去调的

Job--通过此接口定义任务(在此接口中写上要执行的任务)

JobDetail-用来配置Job中的任务

Trigger--配置Job中任务是什么时候执行,以什么频率进行执行

配置好之后,当程序启动的时候Quartz就会读取配置信息,并且将它读取到的信息立刻存到数据库中,自动存到那些表中,以后就会去读取那些表去执行任务

4、配置Quatz

#QuartzProperties
spring.quartz.job-store-type=jdbc//用JDBC存储
spring.quartz.scheduler-name=communityScheduler//调度器的名字
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO//调度器的ID自动生成
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX//任务存储到数据库时用的是哪个类
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate//存储时用的是哪个驱动
spring.quartz.properties.org.quartz.jobStore.isClustered=true//存储的时候是否用集群方式
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.impl.SimpleThreadPool//用的是哪个线程池,此线程池是底层的
spring.quartz.properties.org.quartz.threadPool.threadCount=5//线程的数量

5、编写一个Job实现Job接口

package com.nowcoder.community.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class AlphaJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println(Thread.currentThread().getName()+": execute a quartz job.");
    }
}

6、编写Quatz配置类

package com.nowcoder.community.config;

import com.nowcoder.community.quartz.AlphaJob;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

//配置->数据库->调用
@Configuration
public class QuartzConfig {
    
   //配置JobDetail
    @Bean
    public JobDetailFactoryBean alphaJobDetail(){
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(AlphaJob.class);//声明要管理的Bean,类型是什么
        factoryBean.setName("alphaJob");//给任务起个名字
        factoryBean.setGroup("alphaJobGroup");//给任务加一个组
        factoryBean.setDurability(true);//声明任务是否长久保存
        factoryBean.setRequestsRecovery(true);//声明任务是否可恢复
        return  factoryBean;
    }

    
    //配置Trigger(SimpleTriggerFactoryBean,CronTriggerFactory)
    @Bean
    public SimpleTriggerFactoryBean alphaTrigger(JobDetail alphaJobDetail ){
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
        factoryBean.setJobDetail(alphaJobDetail);//设置这个Trigger为你写Job设置的触发器
        factoryBean.setName("alphaTrigger");//设置Trigger名字
        factoryBean.setGroup("alphaTriggerGroup");//设置Trigger所属的组
        factoryBean.setRepeatInterval(3000);//设置Job执行的频率
        factoryBean.setJobDataMap(new JobDataMap());//Trigger底层要存储Job的状态,可以用JobDataMap对象来存储,也可以自己写一个对象存储
        return factoryBean;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号