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

本文介绍如何使用Spring框架整合Quartz调度器实现任务的即时触发。通过创建单例模式的AppService类来管理Spring的ApplicationContext,并从配置文件中获取Quartz的JobDetail和Trigger,最终手动触发指定的任务。

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

 

1.AppService:一个持有ApplicationContext的单例
2.timerContext.xml quartz定时器配置文件
3.唤醒job代码


请注意红色部分

3.唤醒job代码

Java代码   收藏代码
  1. AppService.setContext(new ClassPathXmlApplicationContext("classpath:atf/config/spring/applicationContext.xml"));  
  2. CronTriggerBean trigger = (CronTriggerBean) AppService.getService(CronTriggerBean.class,"atf.ticket.pnrChkTrigger");  
  3. System.out.println(trigger.getNextFireTime());  
  4. <span style="color: #ff0000;">org.quartz.Scheduler scheduler=(</span>org.quartz.impl.StdScheduler)AppService.getContext().getBean<span style="color: #ff0000;">("schedulerFactoryService");</span>  
  5. JobDetail job=trigger.getJobDetail();  
  6. <span style="color: #ff0000;">scheduler.triggerJob(job.getName(),job.getGroup());</span>  

 2.quartz定时器配置文件

Java代码   收藏代码
  1. <!-- 定时器 -->  
  2.     <bean <span style="color: #ff0000;">id="schedulerFactoryService"</span> class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  3.         <property name="triggers">  
  4.             <list>  
  5.                 <ref bean="atf.ticket.pnrChkTrigger" />   
  6.             </list>  
  7.         </property>  
  8.     </bean>  
  9.       
  10.     <!--pnr 自动审核 1小时一次 -->  
  11.     <bean id="atf.ticket.pnrChkTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  12.         <property name="jobDetail">  
  13.             <ref bean="atf.ticket.pnrChkTask" />  
  14.         </property>  
  15.         <property name="cronExpression">  
  16.             <value>0 0 0/1 * * ?</value>  
  17.         </property>  
  18.     </bean>  
  19.     <bean id="atf.ticket.pnrChkTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  20.         <property name="targetObject">  
  21.             <ref bean="atf.pnr.pnrAutoCheckProcesser" />  
  22.         </property>  
  23.         <property name="targetMethod">  
  24.             <value>checkPnr</value>  
  25.         </property>  
  26.         <property name="concurrent">  
  27.             <value>false</value>  
  28.         </property>  
  29.     </bean>  

 
 1.AppService:一个持有ApplicationContext的单例模式

Java代码   收藏代码
  1. public class AppService  
  2. {  
  3.     private AppService()  
  4.     {  
  5.     }  
  6.   
  7.     private static ApplicationContext context = null;  
  8.   
  9.     public static ApplicationContext getContext()  
  10.     {  
  11.     if (context == null)  
  12.         context = new ClassPathXmlApplicationContext("classpath:atf/config/spring/applicationContext.xml");  
  13.     return context;  
  14.     }  
  15.   
  16.     public static void setContext(ApplicationContext aContext)  
  17.     {  
  18.     context = aContext;  
  19.     }  
  20.   
  21.     public static <T> Object getService(Class<T> type, final String service)  
  22.     {  
  23.     return getContext().getBean(service);  
  24.     }  
  25.   
  26.     public static void autowireService(Object bean)  
  27.     {  
  28.     ((AbstractApplicationContext) context).getBeanFactory().autowireBeanProperties(bean,  
  29.         AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);  
  30.     }  
  31.   
  32.     public static Statistics getStatistics()  
  33.     {  
  34.     SessionFactory sessionFactory = (SessionFactory) getContext().getBean("hibernateSessionFactory");  
  35.     Statistics statistics = sessionFactory.getStatistics();  
  36.     return statistics;  
  37.     }  
  38. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值