zoukankan      html  css  js  c++  java
  • Spring集成Quartz框架的两种方式。

    可参考:https://blog.csdn.net/yk614294861/article/details/84324603

    1、使用Spring与Quarta配置作业得两种方式:
      a、方式一,MethodInvokingJobDetailFactoryBean。作业类即普通的java类,不需要继承自任何基类。
      b、方式二,JobDetailFactoryBean。作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean。

    2、创建一个maven项目,web工程的。引入pom.xml包。

     1 <project xmlns="http://maven.apache.org/POM/4.0.0"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     4     <modelVersion>4.0.0</modelVersion>
     5     <groupId>com.bie</groupId>
     6     <artifactId>springQuartz</artifactId>
     7     <packaging>war</packaging>
     8     <version>0.0.1-SNAPSHOT</version>
     9     <name>springQuartz Maven Webapp</name>
    10     <url>http://maven.apache.org</url>
    11 
    12     <properties>
    13         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    14         <spring.version>4.3.6.RELEASE</spring.version>
    15     </properties>
    16     <dependencies>
    17         <dependency>
    18             <groupId>junit</groupId>
    19             <artifactId>junit</artifactId>
    20             <version>3.8.1</version>
    21             <scope>test</scope>
    22         </dependency>
    23         <dependency>
    24             <groupId>org.springframework</groupId>
    25             <artifactId>spring-webmvc</artifactId>
    26             <version>${spring.version}</version>
    27         </dependency>
    28         <dependency>
    29             <groupId>org.springframework</groupId>
    30             <artifactId>spring-context</artifactId>
    31             <version>${spring.version}</version>
    32         </dependency>
    33 
    34         <dependency>
    35             <groupId>org.springframework</groupId>
    36             <artifactId>spring-aop</artifactId>
    37             <version>${spring.version}</version>
    38         </dependency>
    39 
    40         <dependency>
    41             <groupId>org.springframework</groupId>
    42             <artifactId>spring-core</artifactId>
    43             <version>${spring.version}</version>
    44         </dependency>
    45 
    46         <dependency>
    47             <groupId>org.springframework</groupId>
    48             <artifactId>spring-context-support</artifactId>
    49             <version>${spring.version}</version>
    50         </dependency>
    51 
    52         <dependency>
    53             <groupId>org.springframework</groupId>
    54             <artifactId>spring-tx</artifactId>
    55             <version>${spring.version}</version>
    56         </dependency>
    57         <dependency>
    58             <groupId>org.quartz-scheduler</groupId>
    59             <artifactId>quartz</artifactId>
    60             <version>2.2.3</version>
    61         </dependency>
    62     </dependencies>
    63     <build>
    64         <finalName>springquartz</finalName>
    65         <plugins>
    66             <plugin>
    67                 <groupId>org.apache.maven.plugins</groupId>
    68                 <artifactId>maven-compiler-plugin</artifactId>
    69                 <configuration>
    70                     <source>1.8</source>
    71                     <target>1.8</target>
    72                 </configuration>
    73             </plugin>
    74         </plugins>
    75     </build>
    76 
    77 </project>

    然后配置一下你的web.xml配置文件。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
     5     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     6     id="WebApp_ID" version="3.1">
     7     <display-name>springQuartz</display-name>
     8     <welcome-file-list>
     9         <welcome-file>index.html</welcome-file>
    10         <welcome-file>index.jsp</welcome-file>
    11     </welcome-file-list>
    12 
    13     <!-- spring MVC的核心就是DispatcherServlet,使用springMVC的第一步就是将下面的servlet放入web.xml 
    14         servlet-name属性非常重要,默认情况下,DispatchServlet会加载这个名字-servlet.xml的文件, 如下,就会加载 dispather-servlet.xml,也是在WEN-INF目录下。 -->
    15     <servlet>
    16         <!-- 配置DispatcherServlet -->
    17         <servlet-name>springMvc</servlet-name>
    18         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    19         <!-- 指定spring mvc配置文件位置 不指定使用默认情况 -->
    20         <init-param>
    21             <param-name>contextConfigLocation</param-name>
    22             <param-value>classpath:/spring-mvc.xml</param-value>
    23         </init-param>
    24         <!-- 设置启动顺序 -->
    25         <load-on-startup>1</load-on-startup>
    26     </servlet>
    27     <!-- ServLet 匹配映射 -->
    28     <!-- 设置dispatchservlet的匹配模式,通过把dispatchservlet映射到/,默认servlet会处理所有的请求,包括静态资源 -->
    29     <servlet-mapping>
    30         <servlet-name>springMvc</servlet-name>
    31         <url-pattern>/</url-pattern>
    32     </servlet-mapping>
    33 
    34 
    35 
    36 
    37 </web-app>

    3、使用第一种方式。方式一,MethodInvokingJobDetailFactoryBean。作业类即普通的java类,不需要继承自任何基类。

     1 package com.bie.quartz;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Date;
     5 
     6 import org.springframework.stereotype.Component;
     7 
     8 @Component("myBean")
     9 public class MyBean {
    10     
    11     /**
    12      * 
    13      */
    14     public void printMessage() {
    15         System.out.println("==============================第1种方式开始=========================
    
    
    ");
    16         // 打印当前的执行时间,格式为2017-01-01 00:00:00
    17         Date date = new Date();
    18         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    19         System.out.println("第1种方式:我的bean 执行了呢!" + sf.format(date) + "
    
    
    ");
    20         System.out.println("==============================第1种方式开始=========================
    
    
    ");
    21 
    22     }
    23 }

    4、使用第二种方式,方式二,JobDetailFactoryBean。作业类需要继承自特定的作业类基类,

    如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;

     1 package com.bie.quartz;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Date;
     5 
     6 import org.quartz.JobExecutionContext;
     7 import org.quartz.JobExecutionException;
     8 import org.springframework.scheduling.quartz.QuartzJobBean;
     9 
    10 public class FirstScheduledJob extends QuartzJobBean {
    11 
    12     private AnotherBean anotherBean;
    13 
    14     public void setAnotherBean(AnotherBean anotherBean) {
    15         this.anotherBean = anotherBean;
    16     }
    17 
    18     @Override
    19     protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
    20         System.out.println("==============================第2种方式开始=========================
    
    
    ");
    21         Date date = new Date();
    22         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    23         System.out.println("第2种方式:我的调度作业 执行了呢!" + sf.format(date) + "
    
    
    ");
    24         this.anotherBean.printAnotherMessage();
    25     }
    26 }
     1 package com.bie.quartz;
     2 
     3 import org.springframework.stereotype.Component;
     4 
     5 @Component("anotherBean")
     6 public class AnotherBean {
     7 
     8     public void printAnotherMessage() {
     9         System.out.println("第2种方式: 自己注入的bean被调用了......
    
    
    ");
    10         System.out.println("==============================第2种方式:结束=========================
    
    
    ");
    11     }
    12 
    13 }

    然后配置一下你的配置文件。就可以启动了。需要注意的是如果全局default-lazy-init="true",懒加载,需要调用才会进行调度的。如果将lazy-init='false',不懒加载,那么容器启动就会执行调度程序。

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <beans xmlns="http://www.springframework.org/schema/beans"
      3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4     xmlns:context="http://www.springframework.org/schema/context"
      5     xmlns:mvc="http://www.springframework.org/schema/mvc"
      6     xmlns:p="http://www.springframework.org/schema/p"
      7     xsi:schemaLocation="http://www.springframework.org/schema/beans  
      8             http://www.springframework.org/schema/beans/spring-beans.xsd  
      9             http://www.springframework.org/schema/mvc  
     10             http://www.springframework.org/schema/mvc/spring-mvc.xsd  
     11             http://www.springframework.org/schema/context  
     12             http://www.springframework.org/schema/context/spring-context.xsd">
     13 
     14     <!-- 通过mvc:resources设置静态资源,这样servlet就会处理这些静态资源,而不通过控制器 -->
     15     <!-- 设置不过滤内容,比如:css,jquery,img 等资源文件 -->
     16     <mvc:resources location="/*.html" mapping="/**.html" />
     17     <mvc:resources location="/css/*" mapping="/css/**" />
     18     <mvc:resources location="/js/*" mapping="/js/**" />
     19     <mvc:resources location="/images/*" mapping="/images/**" />
     20     <!-- 设定消息转换的编码为utf-8防止controller返回中文乱码 -->
     21     <bean
     22         class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
     23         <property name="messageConverters">
     24             <list>
     25                 <bean
     26                     class="org.springframework.http.converter.StringHttpMessageConverter">
     27                     <property name="supportedMediaTypes">
     28                         <list>
     29                             <value>text/html;charset=UTF-8</value>
     30                         </list>
     31                     </property>
     32                 </bean>
     33             </list>
     34         </property>
     35     </bean>
     36     <!-- 添加注解驱动 -->
     37     <mvc:annotation-driven />
     38     <!-- 默认扫描的包路径 -->
     39     <context:component-scan base-package="com.bie" />
     40 
     41     <!-- mvc:view-controller可以在不需要Controller处理request的情况,转向到设置的View -->
     42     <!-- 像下面这样设置,如果请求为/,则不通过controller,而直接解析为/index.jsp -->
     43     <mvc:view-controller path="/" view-name="index" />
     44     <bean
     45         class="org.springframework.web.servlet.view.UrlBasedViewResolver">
     46         <property name="viewClass"
     47             value="org.springframework.web.servlet.view.JstlView"></property>
     48         <!-- 配置jsp路径前缀 -->
     49         <property name="prefix" value="/"></property>
     50         <!-- 配置URl后缀 -->
     51         <property name="suffix" value=".jsp"></property>
     52     </bean>
     53 
     54     <!-- ====================================================================================================== -->
     55 
     56     <!-- 第一种方式 -->
     57     <!--第一步 要执行任务的作业类。 -->
     58     <!-- 由于这里采用了注解方式,所以下面得ref直接使用自己注入容器得bean即可。 -->
     59 
     60     <!-- 第二步 将需要执行的定时任务注入JOB中。JobDetail是将定时任务进行组合。 -->
     61     <bean id="simpleJobDetail"
     62         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     63         <!-- 任务类中需要执行的目标类 -->
     64         <property name="targetObject" ref="myBean" />
     65         <!-- 任务类中需要执行的方法 -->
     66         <property name="targetMethod" value="printMessage" />
     67         <!-- 上一次未执行完成的,要等待有再执行。 -->
     68         <property name="concurrent" value="false"></property>
     69     </bean>
     70 
     71     <!-- 距离当前时间1秒之后执行,之后每隔两秒钟执行一次 -->
     72     <bean id="mySimpleTrigger"
     73         class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
     74         <!-- 引用上面得ref="simpleJobDetail" -->
     75         <property name="jobDetail" ref="simpleJobDetail" />
     76         <!-- 距离当前时间1秒之后执行 -->
     77         <property name="startDelay" value="1000" />
     78         <!-- 之后每隔两秒钟执行一次 -->
     79         <property name="repeatInterval" value="2000" />
     80     </bean>
     81 
     82     <!-- 第四步 配置调度工厂 -->
     83     <bean
     84         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     85         <property name="triggers">
     86             <list>
     87                 <!-- 简单定时任务触发器 -->
     88                 <ref bean="mySimpleTrigger" />
     89             </list>
     90         </property>
     91         <property name="jobDetails">
     92             <list>
     93                 <!-- 引用作业详情 -->
     94                 <ref bean="simpleJobDetail" />
     95             </list>
     96         </property>
     97     </bean>
     98 
     99 
    100     <!-- ====================================================================================================== -->
    101 
    102 
    103     <!-- 第二种方式 -->
    104     <!--第一步:1.将自定义的job类(已经继承QuartzJobBean) 注入JobDetailFactoryBean -->
    105     <bean id="firstComplexJobDetail"
    106         class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    107         <property name="jobClass"
    108             value="com.bie.quartz.FirstScheduledJob" />
    109         <property name="jobDataMap">
    110             <map>
    111                 <!-- 注入其他bean引用 -->
    112                 <entry key="anotherBean" value-ref="anotherBean" />
    113             </map>
    114         </property>
    115         <property name="durability" value="true" />
    116     </bean>
    117 
    118 
    119     <!-- 每隔5秒钟执行一次 -->
    120     <!--第二步:2. 定义触发器,并且将jobDetail注入 -->
    121     <bean id="myCronTrigger"
    122         class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    123         <property name="jobDetail" ref="firstComplexJobDetail" />
    124         <!-- 每隔5秒钟执行一次 -->
    125         <property name="cronExpression" value="0/5 * * ? * *" />
    126     </bean>
    127 
    128     <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
    129     <!-- 全局default-lazy-init="true"需要调用才会进行调度的。 -->
    130     <!-- 第三步:配置调度工厂 -->
    131     <bean lazy-init="false"
    132         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    133         <property name="triggers">
    134             <list>
    135                 <ref bean="myCronTrigger" />
    136             </list>
    137         </property>
    138         <property name="jobDetails">
    139             <list>
    140                 <ref bean="firstComplexJobDetail" />
    141             </list>
    142         </property>
    143     </bean>
    144 
    145 
    146 </beans>  

    效果如下所示:

    待续......

  • 相关阅读:
    21. Merge Two Sorted Lists
    496. Next Greater Element I
    (转载)深度学习的weight initialization
    Python collections模块
    Iterables vs. Iterators vs. Generators
    (转)iPhone开发关于UDID和UUID的一些理解
    uniqueIdentifier在ios7不支持后的替代方法
    Android——列表视图 ListView(一)Arrayadapter
    Android——对话框2(日期和时间对话框)
    Android——子线程操作主线程
  • 原文地址:https://www.cnblogs.com/biehongli/p/11505080.html
Copyright © 2011-2022 走看看