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

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(3640)   2023-03-28 11:29:14
    默认情况下,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()




 
地址:https://www.leftso.com/article/459.html

相关阅读

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缓存框架的实现。
环境信息dubbo 2.6.5spring-boot-starter-quartz 2.0.6.RELEASEspring boot 2.0.6.RELEASENPE错误信息org.quartz...
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...
Spring Boot 2.0 绑定properties属性资源文件 Spring Boot 2.0 读取properties配置文件值 Spring Boot 2.0获取properties配...