Spring Boot 2.0 Quartz Job整合注入Spring Context依赖

编程教程 > Java > Spring (6834) 2024-11-26 14:39:04
    默认情况下,quartz不会识别在注释中配置applicationContext.xml或使用@Bean注释配置的spring bean 。如果您尝试@Autowired这些豆类在石英Job或者QuartzJobBean,你会得到NullPointerException

向QuartzJobBean注入Spring上下文

解决方案是使用参数to 方法将Spring的ApplicationContext实例注入org.quartz.SchedulerContext其中。org.quartz.JobExecutionContextexecuteInternal()

  1. 将applicationContext注入SchedulerContext
    这是典型的SchedulerFactoryBeanbean入口。使用setApplicationContextSchedulerContextKey()方法。此方法将ApplicationContext引用的键设置为公开SchedulerContext

@Bean
public SchedulerFactoryBean schedulerFactoryBean() throws IOException, SchedulerException
{
    SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
    scheduler.setTriggers(jobOneTrigger(), jobTwoTrigger());
    scheduler.setQuartzProperties(quartzProperties());
    scheduler.setJobDetails(jobOneDetail(), jobTwoDetail());
    scheduler.setApplicationContextSchedulerContextKey("applicationContext");
    return scheduler;
}

访问在Quartz QuartzJobBean中注入bean

现在,您需要做的就是 - applicationContext根据需要获取引用并开始获取bean。
CustomQuartzJob.java:
 

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.configuration.JobLocator;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
 
public class CustomQuartzJob extends QuartzJobBean {
 
    private String jobName;
    private JobLauncher jobLauncher;
    private JobLocator jobLocator;
 
    public String getJobName() {
        return jobName;
    }
 
    public void setJobName(String jobName) {
        this.jobName = jobName;
    }
 
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException
    {
        try
        {
            ApplicationContext applicationContext = (ApplicationContext)
                            context.getScheduler().getContext().get("applicationContext");
 
            jobLocator = (JobLocator) applicationContext.getBean(JobLocator.class);
            jobLauncher = (JobLauncher) applicationContext.getBean(JobLauncher.class);
 
            Job job = jobLocator.getJob(jobName);
            JobParameters params = new JobParametersBuilder()
                    .addString("JobID", String.valueOf(System.currentTimeMillis()))
                    .toJobParameters();
 
            jobLauncher.run(job, params);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
现在,当您运行quartz作业时,您将获得方法中的jobLocatorjobLauncher实例executeInternal()




 

评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
Spring Boot 2.0是spring boot项目的最新版本,这里讲讲解整合Quartz Job实现任务调度增强功能。向QuartzJobBean注入Spring Boot 2.0 的S...
学习配置Quartz调度程序以运行使用Spring启动Java配置配置的Spring批处理作业。虽然,Spring的默认调度程序也很好,但是quartz可以更好地以更可配置的方式调度和调用任务。...
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
spring boot 2.0 security 5.0 整合,实现自定义表单登录。spring boot 2.0框架使用。
Spring Boot 2.0 有哪些新特性_Spring Boot 2.0新功能,在本文中,我们将探讨为Spring Boot 2.0计划的一些更改和功能。我们还会描述这些变化如何帮助我们提高...
Spring Boot 2.0 支持的Apache Camel 版本发布了_Apache Camel 2.22发布支持Spring Boot 2.0
Spring Boot 2.0 入门 logoback配置实战教程,俗话说好马配好鞍。Spring Boot 框架从各方面给我们带来了开发效率。日志自然也不会落下。本文将讲解与Spring Bo...
学习使用Java配置创建Spring批处理作业(具有多个步骤)。 它使用Spring Boot 2,Spring batch 4和H2数据库来执行批处理作业。
Spring Boot 1.x升级到Spring Boot 2.0迁移指南
Spring Boot 2.0 绑定properties属性资源文件 Spring Boot 2.0 读取properties配置文件值 Spring Boot 2.0获取properties配...
java编程中spring框架5.0介绍说明/概述,spring5,spring框架,java编程
spring boot 2.0 入门之单元测试多线程。spring boot 2.0 项目含多线程异步处理业务单元测试执行主线程结束不等待子线程结束。