`

如何在job 执行类中获得spring 的applicationContext

阅读更多
架构:spring+struts2+ibatis+quartz
现象:想在job执行类中注入业务bean,结果没有成功。那只能获得applicationConxtext,然后getBean.
解决:
	private static final String APPLICATION_CONTEXT_KEY = "applicationContext";

	public final ApplicationContext getApplicationContext(
			JobExecutionContext context) throws JobExecutionException {
		ApplicationContext applicationContext = null;
		try {
			applicationContext = (ApplicationContext) context.getScheduler()
					.getContext().get(APPLICATION_CONTEXT_KEY);
		} catch (SchedulerException e) {
			throw new JobExecutionException(e);
		}
		return applicationContext;
	}


Spring 与Quartz之间的配置,重点是最后一句注入:
	<bean id="scheduler" name="springQuartz" lazy-init="false"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="quartzProperties">
			<props>
				<prop key="org.quartz.scheduler.instanceName">
					SpringScheduler
				</prop>
				<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
				<prop key="org.quartz.jobStore.class">
					org.quartz.impl.jdbcjobstore.JobStoreTX
				</prop>
				<prop key="org.quartz.jobStore.driverDelegateClass">
					org.quartz.impl.jdbcjobstore.StdJDBCDelegate
				</prop>
				<prop key="org.quartz.jobStore.tablePrefix">
					meta_task_
				</prop>
			</props>
		</property>
		<property name="applicationContextSchedulerContextKey">
			<value>applicationContext</value>
		</property>
分享到:
评论
6 楼 huiy 2012-10-19  
lvshuding 写道
得到ApplicationContext为空,不知有没有什么地方需要注意的?

我上次说的不够全面,请再看一下。
5 楼 huiy 2012-07-10  
	<bean id="scheduler" name="springQuartz" lazy-init="false"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="quartzProperties">
			<props>
				<prop key="org.quartz.scheduler.instanceName">
					SpringScheduler
				</prop>
				<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
				<prop key="org.quartz.jobStore.class">
					org.quartz.impl.jdbcjobstore.JobStoreTX
				</prop>
				<prop key="org.quartz.jobStore.driverDelegateClass">
					org.quartz.impl.jdbcjobstore.StdJDBCDelegate
				</prop>
				<prop key="org.quartz.jobStore.tablePrefix">
					meta_task_
				</prop>
			</props>
		</property>
		<property name="applicationContextSchedulerContextKey">
			<value>applicationContext</value>
		</property>
4 楼 huiy 2012-07-10  

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
import org.springframework.context.ApplicationContext;

public class BaseTask {

	private static final String APPLICATION_CONTEXT_KEY = "applicationContext";

	public final ApplicationContext getApplicationContext(
			JobExecutionContext context) throws JobExecutionException {
		ApplicationContext applicationContext = null;
		try {
			applicationContext = (ApplicationContext) context.getScheduler()
					.getContext().get(APPLICATION_CONTEXT_KEY);
		} catch (SchedulerException e) {
			throw new JobExecutionException(e);
		}
		return applicationContext;
	}
}


public class MultiSinglePointMonitor extends BaseTask implements Job{

	private void setServiceBean(JobExecutionContext context) throws Exception {
		ApplicationContext applicationContext = getApplicationContext(context);
		metaQtySinglePointResultService = (MetaQtySinglePointResultService) applicationContext
				.getBean("metaQtySinglePointResultService");
		singlePointMonitorService = (SinglePointMonitorService) applicationContext
				.getBean("singlePointMonitorService");
	}
}
3 楼 lvshuding 2012-06-15  
得到ApplicationContext为空,不知有没有什么地方需要注意的?
2 楼 huiy 2011-07-12  
用得了,测试过的
1 楼 imacback 2011-06-24  
用不了,不知道LZ自己测过没有

相关推荐

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

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

    spring3.0 + Quartz1.52 + applicationContext.xml

    3. **定义Job和Trigger**:接下来,定义你需要执行的Job类,并在XML中声明它们。Job是实际执行的任务,而Trigger定义了Job的执行时间。例如: ```xml &lt;bean id="myTrigger" class="org.springframework....

    spring job 的配置

    标题中的“Spring Job”的配置指的是在Spring框架中配置定时任务,通常使用的是Spring的Task执行器或者Quartz、Spring Batch等扩展组件。Spring Job是一个宽泛的概念,它可能包括Spring的AsyncConfigurer支持的异步...

    spring java 定时器 执行两次 quartz

    - 如果任务不是线程安全的,需要确保其在执行时互斥,例如使用`synchronized`关键字或线程锁。 - 在启动应用时检查已存在的任务,避免重复注册。 总的来说,Spring集成Quartz提供了灵活的定时任务解决方案,但同时...

    spring注解Quartz定时执行功能

    在Spring的主配置类或者启动类中添加如下代码: ```java import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework...

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    Spring+Quartz example

    Spring支持使用`@Component`注解定义Job类,然后通过`@DisallowConcurrentExecution`确保每次只有一个实例在执行。Trigger则是通过`@Scheduled`注解在Spring Bean上定义,或者在配置文件中指定执行时间。 在Spring...

    Spring中定时任务

    在Spring框架中,定时任务是实现自动化操作的重要组成部分,它允许开发者在特定的时间间隔执行一些重复性的任务。本文将深入探讨Spring中的定时任务,并结合Eclipse和Maven项目环境进行讲解。 首先,Spring提供了两...

    quartz2 与spring4 集成 定时任务Job

    将Quartz2集成到Spring4中,可以方便地管理和执行定时任务,无需在代码中直接管理Scheduler实例,而是通过Spring配置来定义和控制Job。 集成Quartz2和Spring4的过程主要包括以下几个步骤: 1. **引入依赖**:首先...

    Java_Spring与Quartz的整合

    - 如果Job需要在数据库事务中执行,可以利用Spring的事务管理功能,确保Job在失败时能回滚。 通过以上步骤,我们可以实现Spring和Quartz的无缝整合,构建出一个强大且灵活的定时任务系统。注意,实际项目中还需要...

    spring+quartz demo

    在 Spring 配置中,可以使用 `&lt;bean&gt;` 标签创建 JobDetail 实例,并关联 Job 类。 3. **Trigger 配置**: Trigger 决定了 Job 的执行时间。可以使用 CronTrigger 或 SimpleTrigger,前者基于 Cron 表达式,后者...

    spring2.0 Quartz 执行每天定时任务 普通普是执行任务

    标题中的“spring2.0 Quartz 执行每天定时任务 普通普是执行任务”涉及到的是在Spring 2.0框架中使用Quartz库来创建并执行每天定时任务的场景。Quartz是一款强大的开源作业调度框架,它可以用来按计划执行各种任务,...

    spring和quartz的定时器的启动和停止例子

    6. **异常处理**:为确保任务的健壮性,可以在Job类中捕获并处理异常,或者在Spring配置中定义JobListener,监听job的执行状态。 通过以上步骤,我们可以灵活地在Spring应用中使用Quartz实现定时任务的启动和停止。...

    quartz与spring

    通过Spring的ApplicationContext,我们可以将Quartz的配置整合到Spring的配置文件中,这样Quartz的Job实例就可以被Spring管理,包括实例化、依赖注入以及销毁。Spring还提供了`org.springframework.scheduling....

    Quartz触发器的使用DEMO(Spring实现)

    5. **启动Scheduler**:在Spring的主入口类或者初始化方法中,启动Scheduler,使其开始监听并执行Trigger。 ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml")...

    soft-spring demo

    例如,你可以创建一个Job类,该类是Quartz中的一个接口,用于定义具体的工作逻辑,然后通过Spring的配置文件或注解将这个Job与特定的触发器关联,从而决定何时执行这个任务。 在Spring中集成Quartz,首先需要在...

    spring+quartz任务调度代码版

    在Spring整合Quartz的过程中,首先需要在Spring配置文件中声明Scheduler工厂bean,然后定义Job和Trigger的bean。Spring通过`org.springframework.scheduling.quartz.SchedulerFactoryBean`来创建和管理Quartz的...

    spring quartz任务调度完整可执行

    在Spring的配置文件(如applicationContext.xml)中,我们需要配置SchedulerFactoryBean来启动Quartz调度器: ```xml &lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean...

    Quartz+Spring定时触发器例子

    4. **整合Spring**:通过Spring的`@Autowired`注解或其他方式,可以在Job类中注入其他服务或依赖,使得任务执行更加灵活。 5. **启动和管理**:在Spring的主程序或初始化代码中,你需要获取Scheduler的bean并调用`...

    spring3配置quartz定时任务

    在Java开发中,Spring框架是不可或缺的一部分,而Quartz则是一个强大的作业调度库,用于创建、调度和执行作业。本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务...

Global site tag (gtag.js) - Google Analytics