Quartz

应用启动加载集群配置

  • @Bean 注解交由 Spring BeanFactory 容器管理

    @Bean
    public JobDetailFactoryBean testJobDetailFactory() {
    JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
    jobDetailFactory.setName("test-job");
    jobDetailFactory.setGroup("sns");
    jobDetailFactory.setJobClass(TestJob.class);
    jobDetailFactory.setDurability(true);
    return jobDetailFactory;
    } @Bean
    public CronTriggerFactoryBean testJobTrigger(
    @Qualifier("testJobDetailFactory") JobDetailFactoryBean factory) {
    CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
    if (factory.getObject() != null) {
    tigger.setJobDetail(factory.getObject());
    }
    tigger.setCronExpression("0/10 * * * * ?");
    tigger.setName("test-job-trigger");
    return tigger;
    }
    /**
    * SchedulerFactoryBean 实现 InitializingBean,
    * description: quartz定时任务配置
    */
    @Configuration
    public class QuartzConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(QuartzConfig.class);
    private static final String RESOURCE_NAME = "quartz.properties"; @Resource
    private DataSource dataSource;
    @Autowired
    private SpringJobFactory springJobFactory; @Bean
    public SchedulerFactoryBean schedulerFactory(Trigger... triggers) {
    SchedulerFactoryBean factory = new SchedulerFactoryBean();
    Properties p = new Properties();
    try {
    p.load(this.getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME));
    } catch (IOException e) {
    LOGGER.error("quartz定时任务加载{}过程中发生错误。");
    throw new Error(e);
    }
    factory.setQuartzProperties(p);
    factory.setDataSource(dataSource);
    factory.setOverwriteExistingJobs(true);
    factory.setStartupDelay(20);
    factory.setTriggers(triggers);
    factory.setJobFactory(springJobFactory);
    return factory;
    }
    }
  • 实现 org.springframework.boot.CommandLineRunner ,应用启动成功后开启创建任务

    @Component
    public class InitScheduleOfAppStarted implements CommandLineRunner {
    private static final Logger LOGGER = LoggerFactory.getLogger(InitScheduleOfAppStarted.class); @Autowired
    private SysJobService sysJobService;
    // 任务 Bean 交由 Spring 管理,并注入任务所需的 Bean 实例
    @Autowired
    private SpringJobFactory springJobFactory; @Override
    public void run(String... args) throws Exception {
    Map<String, String> runJob = new HashMap();
    runJob.put("jobStatus", "1");
    List<SysJob> jobList = sysJobService.querySysJobList(runJob); if (null == jobList || jobList.size() <= 0) {
    LOGGER.info("app started,暂无需要执行的任务");
    } SchedulerFactory sf = new StdSchedulerFactory();
    Scheduler scheduler = sf.getScheduler();
    // 注入 spring 示例,否则执行时找不到 spring 容器中的 bean
    scheduler.setJobFactory(springJobFactory);
    scheduler.start(); for (SysJob sysJob : jobList) { // jobDetail
    String jobName = sysJob.getJobName();
    String jobGroup = sysJob.getJobGroup();
    JobDetail jobDetail = JobBuilder.newJob(getClass(sysJob.getJobClassPath()).getClass())
    .withIdentity(jobName, jobGroup)
    .build();
    // jobTriller
    CronTrigger cronTrigger = TriggerBuilder.newTrigger()
    .withIdentity(jobName, jobGroup)
    .withSchedule(CronScheduleBuilder.cronSchedule(sysJob.getJobCron()))
    .build();
    // 关联
    scheduler.scheduleJob(jobDetail, cronTrigger);
    }
    } private static Job getClass(String jobClassPath) throws Exception{
    Class<?> aClass = Class.forName(jobClassPath);
    return (Job) aClass.newInstance();
    }
    }
  • 继承 org.springframework.scheduling.quartz.AdaptableJobFactory 实例化和依赖注入 Spring Bean 实例

    @Component
    public class SpringJobFactory extends AdaptableJobFactory { @Autowired
    private AutowireCapableBeanFactory capableBeanFactory; @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
    Object jobInstance = super.createJobInstance(bundle);
    capableBeanFactory.autowireBean(jobInstance);
    return jobInstance;
    }
    }

SpringBoot + Quartz 集成的更多相关文章

  1. SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)

    最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...

  2. spring-boot-2.0.3之quartz集成,不是你想的那样哦!

    前言 开心一刻 晚上回家,爸妈正在吵架,见我回来就都不说话了,看见我妈坐在那里瞪着我爸,我就问老爸“你干什么了惹我妈生这么大气?”  我爸说“没有什么啊,倒是你,这么大了还没有媳妇,要是你有媳妇给我们 ...

  3. spring-boot-2.0.3之quartz集成,数据源问题,源码探究

    前言 开心一刻 着火了,他报警说:119吗,我家发生火灾了. 119问:在哪里? 他说:在我家. 119问:具体点. 他说:在我家的厨房里. 119问:我说你现在的位置. 他说:我趴在桌子底下. 11 ...

  4. spring-boot-2.0.3之quartz集成,最佳实践

    前言 开心一刻 快过年了,大街上,爷爷在给孙子示范摔炮怎么放,嘴里还不停念叨:要像这样,用劲甩才能响.示范了一个,两个,三个... 孙子终于忍不住了,抱着爷爷的腿哭起来:爷呀,你给我剩个吧! 新的一年 ...

  5. spring-boot+quartz的CRUD动态任务管理系统

    版权声明:作者: 小柒 出处: https://blog.52itstyle.com 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大 ...

  6. Springboot+Quartz+druid+多库

    很久以前就用过quartz,现在重新用起,主要实现集群方式启动,并且支持多数据源注入到job中.网上demo很多,方法大同小异.但关于数据源注入的深入介绍不多,不错的文章:<spring-boo ...

  7. Quartz集成springMVC 的方案二(持久化任务、集群和分布式)

    Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等. Quartz核心是调度器,还采用多线程管理. 1.持久化任务:当应用程序停止运行时,所有调度信 ...

  8. Quartz集成springMVC 的方案一

    Quartz是一个开放源码项目,专注于任务调度器. springMVC 具体的搭建框架就不具体说明,接下来直接描述把Quartz集成到springMVC 框架中. 步骤: 1.引入所需要的jar包 2 ...

  9. ABP文档 - Quartz 集成

    文档目录 本节内容: 简介 安装 创建工作 调度工作 更多 简介 Quartz 是一个功能完整的开源工作调度系统,可用于最小的应用到一个大型的企业系统.Abp.Quartz 包简单地把Quartz集成 ...

  10. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...

随机推荐

  1. 记录一次排查log4cxx库按照日期回滚,不创建新目录的BUG

    目录 1.背景 2.排查步骤 2.1.错误代码定位 2.2.问题猜测 2.3.错误代码分析 2.4.错误原因 3.解决方法 1.背景 C++ 项目,使用了 log4cxx 日志库,版本为:0.10.0 ...

  2. 12月16日内容总结——图书管理系统、聚合与分组查询、F与Q查询

    目录 一.图书管理系统讲解 二.聚合查询 三.分组查询 四.ORM中如何给表再次添加新的字段 五.F与Q查询 六.作业 一.图书管理系统讲解 1.表设计 先考虑普通字段再考虑外键字段 数据库迁移.测试 ...

  3. spring in action day-06 JMS -ActiveMQ Artemi

    JMS -ActiveMQ Artemi JMS:它是一个规范,类似于jdbctemplate Spring提供了jmstemplate来发送和接收消息. 搭建JMS环境 1.引入依赖 我们要使用的消 ...

  4. 【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"狂飙"的评论

    目录 一.背景介绍 二.爬虫代码 2.1 展示爬取结果 2.2 爬虫代码讲解 三.可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间 ...

  5. 数据对接:从Notion Database到低代码平台

    前言 Notion简介 近几年,有一款叫Notion的产品异常火爆,它是集笔记.任务管理.Wiki.数据管理为一体的产品,他主打两个理念「模块化」和「All-in-one」,Notion最有魅力的还是 ...

  6. 安卓逆向 ARM基础篇 二

    1.寄存器寻址的八中方法 1.立即寻址 二 寄存器寻址 三 寄存器移位寻址 过程 R2 移位 传给R0 四 寄存器间接寻址 五 基址寻址 六 多寄存器寻址 七 堆栈寻址 七 堆栈寻址

  7. TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 —— 网络地址的分配方式

    TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 -- 网络地址的分配方式 关于 DHCP(DHCP, Dynamic Host Co ...

  8. CF1625D.Binary Spiders

    \(\text{Problem}\) 大概就是给出 \(n\) 个数和 \(m\),要从中选最多的数使得两两异或值大于等于 \(m\) 输出方案 \(\text{Solution}\) 一开始的想法很 ...

  9. 【故障公告】Kubernetes 集群节点宕机造成博客站点故障

    非常抱歉!今天 18:40-18:55 左右 Kubernetes 集群一台高配节点突然宕机,造成博客站点故障,访问时出现 502 Bad Gateway,由此给您带来麻烦麻烦,请您谅解. 发现故障并 ...

  10. java学习日记20230225-java介绍

    sun公司 oak语言--java gosling >sun 1995 java第一个版本 2009年 甲骨文公司收购sun 2011 java7 2014 java8 2022-2030年 长 ...