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
相关推荐
`init` 方法则获取 Spring 上下文,并从中获取 `StartJobService` 实例,然后通过 `ExecutorService` 来执行这个服务。 ##### 3.2 StartJobService 类分析 ```java @Service public class StartJobService ...
1. **Spring框架的核心库**:`spring-context.jar` - 这个jar包含了Spring的核心功能,如依赖注入和上下文管理,是使用Spring的基础。 2. **Spring的AOP库**:`spring-aop.jar` - 提供了面向切面编程的支持,使得...
Spring通过其`org.springframework.scheduling.quartz`包提供了对Quartz的全面支持,允许我们在Spring应用上下文中配置和管理Quartz的Job和Trigger。这样,我们可以利用Spring的依赖注入(DI)和AOP特性,让定时任务...
本篇文章将探讨如何结合Spring的ApplicationContext和Quartz,实现在程序中动态唤醒和管理Quartz的Job。 首先,`AppService.java`很可能包含了一个服务类,该类可能负责与Quartz相关的业务逻辑,例如创建、更新或...
- 在项目中添加 Quartz 相关的依赖库,如 `quartz-1.6` 或 `quartz-1.8`,以及 Spring 提供的上下文支持、Web 支持、日志库(如 Commons-collections)等。 3. **编写 Job 类** - 创建一个实现了 `org.quartz.Job...
这使得我们可以利用Spring的依赖注入(DI)和管理上下文来创建和控制Quartz的相关组件,如`Trigger`和`JobDetail`。 创建`JobDetail`时,Spring提供了`JobDetailBean`,它是Quartz的`JobDetail`类的扩展。`...
// 确保应用上下文已经初始化完毕 if (event.getApplicationContext().getParent() == null) { // 获取SchedulerFactoryBean SchedulerFactoryBean schedulerFactoryBean = (SchedulerFactoryBean) event....
通过查看源代码,我们可以深入理解如何配置和调用这些组件,以及如何在Spring上下文中使用Quartz进行任务调度。此外,项目可能还包含了测试用例,展示了如何验证定时任务的正确执行。 总结起来,"spring-quartz-021...
最后,启动Spring应用上下文,Quartz会自动根据配置的Trigger和Job执行任务。你可以通过Spring的`ApplicationContext`获取到`Scheduler`实例,手动操作如暂停、恢复或删除任务。 总结来说,Spring与Quartz的集成...
测试程序主要负责启动Spring上下文,并确保Quartz任务能够正确启动。示例代码如下: ```java package com.kay.quartz; import org.springframework.context.ApplicationContext; import org.springframework....
// 创建JobExecutionContext模拟上下文 JobExecutionContext context = mock(JobExecutionContext.class); MyJob job = new MyJob(); job.execute(context); // 验证任务逻辑 } @SpringBootApplication public...
通过Spring的XML配置或注解方式,我们可以轻松地将Quartz任务与Spring应用上下文集成。这使得任务的创建、依赖注入和管理变得更加简单。 在压缩包内的文件中: 1. `FrequencyTaskSchudle.java` - 这个文件可能包含...
这两个框架的结合使得开发者能够方便地在Spring管理的上下文中配置和控制Quartz定时任务,提高了应用程序的灵活性和可维护性。 Quartz 1.86是Quartz的一个较早版本,它支持创建、调度和执行任务。通过定义Job类来...
`Aware`接口,如`ApplicationContextAware`、`BeanFactoryAware`,让bean可以感知到它们的上下文或者工厂,从而能够获取其他bean或者配置信息。`FactoryBean`则是一种特殊的bean,它不直接代表业务对象,而是用于...
1. **核心容器**:这是Spring的基础,包括了Bean工厂(BeanFactory)和应用上下文(ApplicationContext)两个关键组件,它们负责管理对象的生命周期和依赖关系。 2. **数据访问/集成**:Spring提供了对JDBC的抽象层...
SpringBoot 应用中获取应用上下文方法 在 SpringBoot 应用中获取应用上下文是非常重要的一步,通过获取...同时,我们也可以通过定义上下文工具类和在启动入口类中注入 `ApplicationContext` 对象来获取应用上下文。
Quartz是一个开源的作业调度框架,而Spring提供了与Quartz的无缝集成,使得开发者能够方便地在Spring应用上下文中配置和管理调度任务。 Quartz的核心概念包括: 1. **Job**:这是执行任务的基本单元,它定义了需要...
将两者结合使用,可以在Spring管理的上下文中轻松地安排和执行定时任务。 在"Quartz+spring实例应用"中,我们可以学习到如何配置和整合这两个框架。首先,你需要在项目中引入Quartz和Spring的相关依赖,这通常通过...
接下来,我们需要配置Spring的上下文文件。在applicationContext.xml中,定义一个SchedulerFactoryBean,这是Spring提供的用于管理Quartz Scheduler的工厂bean。在这个bean中,我们可以设置Quartz的相关属性,如Job...
总结来说,Spring整合Quartz涉及到Spring上下文的配置、Quartz的Job和Trigger定义,以及持久化和集群的设置。通过这样的整合,你可以轻松地在Spring应用中管理复杂的定时任务,同时保证任务的可靠性和可扩展性。