`

Spring +quartz获取ApplicationContext上下文

 
阅读更多

Spring +quartz获取ApplicationContext上下文

job存在数据库中,可以进行动态的增增删改查,最近遇到了如何获取ApplicationContext上下文的问题,解决办法如下

applicationContext-quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
    <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
        <property name="configLocation" value="classpath:quartz.properties"/>
    </bean>
</beans>

<!-- applicationContextSchedulerContextKey: 是 org.springframework.scheduling.quartz.SchedulerFactoryBean这个类中把spring上 下 文以key/value的方式存放在了quartz的上下文中了,可以用 applicationContextSchedulerContextKey所定义的key得到对应的spring上下文 -->

  

对应的job任务

public class QuartzJobBean implements Job {


/* (non-Javadoc)
 * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
 */
@Override
public void execute(JobExecutionContext jobContext) throws JobExecutionException {


String jobId = jobContext.getJobDetail().getDescription();
String serviceId = jobContext.getTrigger().getDescription();


ApplicationContext applicationContext=null;
try {
applicationContext=getApplicationContext(jobContext);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
WebServiceService webServiceService = (WebServiceService) applicationContext.getBean("webServiceService");
WebServicePOJO  webService = webServiceService.getWebService(serviceId);
ScheduleService.schedule(webService.getNameSpace(), webService.getServiceName(), webService.getWsdlURL(), webService.getMethod());
}

private static final String APPLICATION_CONTEXT_KEY = "applicationContextKey";
private ApplicationContext getApplicationContext(JobExecutionContext context) throws Exception {
ApplicationContext appCtx = null;
appCtx = (ApplicationContext) context.getScheduler().getContext().get(APPLICATION_CONTEXT_KEY);
if (appCtx == null) {
throw new JobExecutionException("No application context available in scheduler context for key \"" + APPLICATION_CONTEXT_KEY + "\"");
}
return appCtx;
}


}

APPLICATION_CONTEXT_KEY的值是第一个XML中配置的值,通过getApplicationContext方法传入quartz的context即可获取ApplicationContext上下文,进而获取对应的bean

原文:http://blog.csdn.net/shanhuhau/article/details/32711949

分享到:
评论

相关推荐

    spring+quartz 动态任务方案

    `init` 方法则获取 Spring 上下文,并从中获取 `StartJobService` 实例,然后通过 `ExecutorService` 来执行这个服务。 ##### 3.2 StartJobService 类分析 ```java @Service public class StartJobService ...

    spring+quartz需要的4个jar包 不需要6个

    1. **Spring框架的核心库**:`spring-context.jar` - 这个jar包含了Spring的核心功能,如依赖注入和上下文管理,是使用Spring的基础。 2. **Spring的AOP库**:`spring-aop.jar` - 提供了面向切面编程的支持,使得...

    Spring+Quartz实现定时任务的配置方法.rar

    Spring通过其`org.springframework.scheduling.quartz`包提供了对Quartz的全面支持,允许我们在Spring应用上下文中配置和管理Quartz的Job和Trigger。这样,我们可以利用Spring的依赖注入(DI)和AOP特性,让定时任务...

    利用spring的ApplicationContext在程序中唤醒quartz的job

    本篇文章将探讨如何结合Spring的ApplicationContext和Quartz,实现在程序中动态唤醒和管理Quartz的Job。 首先,`AppService.java`很可能包含了一个服务类,该类可能负责与Quartz相关的业务逻辑,例如创建、更新或...

    spring添加触发器+quartz

    - 在项目中添加 Quartz 相关的依赖库,如 `quartz-1.6` 或 `quartz-1.8`,以及 Spring 提供的上下文支持、Web 支持、日志库(如 Commons-collections)等。 3. **编写 Job 类** - 创建一个实现了 `org.quartz.Job...

    SpringQuartz的使用文档

    这使得我们可以利用Spring的依赖注入(DI)和管理上下文来创建和控制Quartz的相关组件,如`Trigger`和`JobDetail`。 创建`JobDetail`时,Spring提供了`JobDetailBean`,它是Quartz的`JobDetail`类的扩展。`...

    spring注解Quartz定时执行功能

    // 确保应用上下文已经初始化完毕 if (event.getApplicationContext().getParent() == null) { // 获取SchedulerFactoryBean SchedulerFactoryBean schedulerFactoryBean = (SchedulerFactoryBean) event....

    spring-quartz-021

    通过查看源代码,我们可以深入理解如何配置和调用这些组件,以及如何在Spring上下文中使用Quartz进行任务调度。此外,项目可能还包含了测试用例,展示了如何验证定时任务的正确执行。 总结起来,"spring-quartz-021...

    spring quartz实现触发器demo(笔记)

    最后,启动Spring应用上下文,Quartz会自动根据配置的Trigger和Job执行任务。你可以通过Spring的`ApplicationContext`获取到`Scheduler`实例,手动操作如暂停、恢复或删除任务。 总结来说,Spring与Quartz的集成...

    Spring中Quartz的配置

    测试程序主要负责启动Spring上下文,并确保Quartz任务能够正确启动。示例代码如下: ```java package com.kay.quartz; import org.springframework.context.ApplicationContext; import org.springframework....

    spring整合quartz定时任务

    // 创建JobExecutionContext模拟上下文 JobExecutionContext context = mock(JobExecutionContext.class); MyJob job = new MyJob(); job.execute(context); // 验证任务逻辑 } @SpringBootApplication public...

    spring quartz 整合示例

    通过Spring的XML配置或注解方式,我们可以轻松地将Quartz任务与Spring应用上下文集成。这使得任务的创建、依赖注入和管理变得更加简单。 在压缩包内的文件中: 1. `FrequencyTaskSchudle.java` - 这个文件可能包含...

    quartz1.86+spring3.2测试实例

    这两个框架的结合使得开发者能够方便地在Spring管理的上下文中配置和控制Quartz定时任务,提高了应用程序的灵活性和可维护性。 Quartz 1.86是Quartz的一个较早版本,它支持创建、调度和执行任务。通过定义Job类来...

    Spring-quartz.zip

    `Aware`接口,如`ApplicationContextAware`、`BeanFactoryAware`,让bean可以感知到它们的上下文或者工厂,从而能够获取其他bean或者配置信息。`FactoryBean`则是一种特殊的bean,它不直接代表业务对象,而是用于...

    spring+commons-logging

    1. **核心容器**:这是Spring的基础,包括了Bean工厂(BeanFactory)和应用上下文(ApplicationContext)两个关键组件,它们负责管理对象的生命周期和依赖关系。 2. **数据访问/集成**:Spring提供了对JDBC的抽象层...

    详解在SpringBoot应用中获取应用上下文方法

    SpringBoot 应用中获取应用上下文方法 在 SpringBoot 应用中获取应用上下文是非常重要的一步,通过获取...同时,我们也可以通过定义上下文工具类和在启动入口类中注入 `ApplicationContext` 对象来获取应用上下文。

    spring整合quartz的代码

    Quartz是一个开源的作业调度框架,而Spring提供了与Quartz的无缝集成,使得开发者能够方便地在Spring应用上下文中配置和管理调度任务。 Quartz的核心概念包括: 1. **Job**:这是执行任务的基本单元,它定义了需要...

    Quartz+spring实例应用

    将两者结合使用,可以在Spring管理的上下文中轻松地安排和执行定时任务。 在"Quartz+spring实例应用"中,我们可以学习到如何配置和整合这两个框架。首先,你需要在项目中引入Quartz和Spring的相关依赖,这通常通过...

    Spring Quartz 调度器

    接下来,我们需要配置Spring的上下文文件。在applicationContext.xml中,定义一个SchedulerFactoryBean,这是Spring提供的用于管理Quartz Scheduler的工厂bean。在这个bean中,我们可以设置Quartz的相关属性,如Job...

    spring整合quartz

    总结来说,Spring整合Quartz涉及到Spring上下文的配置、Quartz的Job和Trigger定义,以及持久化和集群的设置。通过这样的整合,你可以轻松地在Spring应用中管理复杂的定时任务,同时保证任务的可靠性和可扩展性。

Global site tag (gtag.js) - Google Analytics