zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    DP(第三版(较简单))
    【テンプレート】洛谷
    【説明する】并查集
    第一篇博文
    cogs 2398 切糕 最小割
    cogs 1873 happiness 最大权闭合子图
    cogs 1274 最小截断 最小割唯一判定
    cogs 736 星际转移 最大流
    cogs 329 K-联赛 最大流
    cogs 2605 寒假ing
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6708233.html
Copyright © 2011-2022 走看看