Java相关的定时任务

就现在而言,关于定时任务有各种各样的架构:Java 定时器类【Timer】,Spring定时器类【@Scheduled】,Quartz分布式定时器类,xxl-job分布式任务调度平台。xxl-job是一款轻量级定时任务可以分布式部署的调度平台。很多大的公司都在采用。

整体来说,xxl-job就是quartz的一个增强版,其弥补了quartz不支持并行调度,不支持失败处理策略和动态分片的策略等诸多不足,同时其有管理界面,上手比较容易,支持分布式,适用于分布式场景下的使用。两者相同的是都是通过数据库锁来控制任务不能重复执行。 


1.quartz

public class StdSchedulerFactory implements SchedulerFactory {
    public static final String PROPERTIES_FILE = "org.quartz.properties";
    public void initialize() throws SchedulerException {
        // 前提需要通过 System.setProperty(PROPERTIES_FILE) 设置 PROPERTIES_FILE 指定的value
        String requestedFile = System.getProperty(PROPERTIES_FILE);
        String propFileName = requestedFile != null ? requestedFile: "quartz.properties";
        // propFileNameb:绝对路径
        File propFile = new File(propFileName);

        Properties props = new Properties();

        InputStream in = null;

        try {
            if (propFile.exists()) {// 绝对路径下存在目标文件
                in = new BufferedInputStream(new FileInputStream(propFileName));
                props.load(in);// 将配置文件中kv配置值加载到对象Properties
            } else if (requestedFile != null) {
                // 通过类加载器将类路径下的指定文件转化为输入流
                in = Thread.currentThread().getContextClassLoader().getResourceAsStream(requestedFile);
                in = new BufferedInputStream(in);
                props.load(in);
            } else {//以下均为类加载器加载类路径下的文件
                //获取类加载器
                ClassLoader cl = getClass().getClassLoader();
                if(cl == null)cl = findClassloader();
                // 默认从类路径下加载 quartz.properties 文件
                in = cl.getResourceAsStream("quartz.properties");
                if (in == null) {
                    //不要在路径添加绝对路径"/"
                    in = cl.getResourceAsStream("/quartz.properties");
                }
                if (in == null) {
                    in = cl.getResourceAsStream("org/quartz/quartz.properties");
                }
                props.load(in);
            }
        } finally {
            if(in != null) {
                try { in.close(); } catch(IOException ignore) { /* ignore */ }
            }
        }
        initialize(overrideWithSysProps(props, getLog()));
    }
}

 2.xxl_job

调度中心~xxl-job-admin:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

执行器~xxl-job-executor-sample-springboot:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。

2.1.调度中心

执行器通过如下地址自动上报至调度中心:

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

表xxl_job_info:记录任务的列表 ,包含每个任务的调度类型、运行模式、状态。

任务开启状态下,执行器中断重启后将继续执行任务。


2.2.执行器

每个执行器都会将自己地址信息上报至调度中心,调度中心根据策略调用调用执行器触发任务。


分布式任务调度平台XXL-JOB

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值