• spring整合Quartz


    整合前的概述:与spring整合实质上就是把quartz的内部实现交给spring管理,很好的体现的spring的价值所在。

    1.既然要用到spring,必要的步骤就是在web.xml中配置监听器器和加载核心配置文件

     <!-- spring配置文件位置 -->
         <context-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:applicationContext.xml</param-value>
         </context-param>
         <!-- spring核心监听器 -->
         <listener>
             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
         </listener>

    2.首先在Spring核心配置文件中applicationContext.xml文件中配置三个重要的对象,分别是JobDetailFactoryBean,trigger,Scheduler:将trigger交给大管家

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
           
          <!-- Spring与Quartz的配置 -->
          
          
     <!-- 第一步:配置JobDetail -->
         <bean id="helloJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
             <!-- 注入job的类型 -->
             <property name="jobClass" value="cn.quartz.job.HelloJob" />
         </bean>
         <!-- 第二步:配置trigger :简单任务-->
         <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
             <!-- 注入 JobDetail任务-->
             <property name="jobDetail" ref="helloJobDetail" />
             <!-- 服务启动后第一次执行的间隔时间:毫秒 -->
             <property name="startDelay" value="5000" />
             <!-- 每隔多长时间执行一次 -->
             <property name="repeatInterval" value="2000" />
         </bean>
         <!-- 第三步:配置Scheduler -->
         <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
         
         <!-- 注入覆盖默认的jobFactory -->
             <property name="jobFactory" ref="jobFactory"/>    
         
             <property name="triggers">
                 <list>
                     <!-- 注入trigger -->
                     <ref bean="simpleTrigger" />
                 </list>
             </property>
         </bean>
                
          <!-- 注解扫描 -->
          <context:component-scan base-package="cn"></context:component-scan>
     </beans>

    3.编写任务对象(执行的任务继承Job),可以在该类里面调用业务层或者dao层

      package cn.quartz.job; 
      import org.quartz.Job;
      import org.quartz.JobExecutionContext;
      import org.quartz.JobExecutionException;
      import org.springframework.beans.factory.annotation.Autowired;
      import cn.service.QuartzService;
      
      public class MyJob implements Job{
         
         @Autowired
         private QuartzService quartzService;
         
         @Override
         public void execute(JobExecutionContext context) throws JobExecutionException {
     
     //        调用业务层或者dao层
             quartzService.say();
         }
     }

    4.将上面的任务对象转换为Bean,由Spring来调用

      package cn.service;
      import org.quartz.spi.TriggerFiredBundle;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
      import org.springframework.scheduling.quartz.AdaptableJobFactory;
      import org.springframework.stereotype.Service;
      
      @Service("jobFactory")
     public class JobFactory extends AdaptableJobFactory {
         @Autowired
         //将普通的java对象放入spring容器中变成bean
         private AutowireCapableBeanFactory capableBeanFactory;
     
         @Override
         protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
             // 调用父类的方法:quartz基于配置job类型生产了一个job对象(没有在spring容器中)
             Object jobInstance = super.createJobInstance(bundle);
             // 将Quartz生产出来的job对象,注入到spring容器,该job对象就变成了bean
             capableBeanFactory.autowireBean(jobInstance);
             return jobInstance;
         }
     }

    5.需要在配置文件中Scheduler注入 jobFactory 

    <!-- 注入覆盖默认的jobFactory -->

    <property name="jobFactory" ref="jobFactory"/>

     

    今天要比昨天好
  • 相关阅读:
    你为什么老是找不到满意的工作? 多思考自己的原因 !
    微信企业号开发之-如何获取secret 序列号
    可以免费自学编程的12个网站
    软件职业:聊聊学习这件事!
    致行业初学者:关于某些培训机构,老徐聊几句,也许对你们有用
    查看centos版本号
    配置mysql远程访问权限,大家可能掉过的那些坑~
    测试必备技能系列6:软件安装部署是最基本的能力!
    一个测试老鸟对职业技术交流群的几点看法
    为什么你一直找不到工作:因为你什么都想学,什么都不会!
  • 原文地址:https://www.cnblogs.com/lichangyun/p/8424429.html
Copyright © 2020-2023  润新知