【輕鬆整合】-Quartz的3種常用整合方式演練

前言:

通過不同的架構整合Quartz,demo演練,輕鬆愉快


◇Java API整合Quartz的代碼

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

◇Spring的Schema整合Quartz的代碼

1.創建web項目

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.導入jar包

  • Spring
  • Quartz
  • Spring-Support
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.zcw</groupId>
  <artifactId>spring-quartz</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>spring-quartz Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.3.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.1.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.6</version>
      <scope>provided</scope>
    </dependency>
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.1.6.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>spring-quartz</finalName>
      <plugins>
       <!--引入Tomcat插件-->
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <executions>
            <execution>
              <id>tomcat-run</id>
              <goals>
                <goal>exec-war-only</goal>
              </goals>
              <phase>package</phase>
              <configuration>
                <path>/</path>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
  </build>
</project>


3.配置文件

  • 配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Spring-Quartz</display-name>
  <!--指定配置文件的位置-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:spring-config.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>



  • 創建spring-config.xml
    在這裏插入圖片描述
    在這裏插入圖片描述

4.兩種實現方式

  • 使用JobDetailFactoryBean(必須實現一個接口)
  • 使用MethodInvokingJobDetailFactoryBean

5.配置Trigger

  • 配置Trigger對應的JobDetail
  • 配置SchedulerFactoryBean
  • 在這裏插入圖片描述
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">



<bean id="jobDetail1" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" value="com.zcw.MyJob"/>
    <property name="name" value="myJob1"/>
    <property name="group" value="group1"/>
</bean>
    <bean id="trigger1" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail1"/>
        <property name="name" value="trigger1"/>
        <property name="group" value="group1"/>
        <!--5秒執行一次-->
        <property name="repeatInterval" value="5"/>
    </bean>

    <bean id="schedule" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="trigger1"/>
            </list>
        </property>
    </bean>
</beans>

  • 第二種實現方式:

package com.zcw;

import java.time.LocalTime;

/**
 * @ClassName : MyJob2
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-06-12 11:58
 */
public class MyJob2 {
    public void excute(){
        LocalTime now = LocalTime.now();
        System.out.println(now.toString()+",MyJob2  O(∩_∩)O哈哈~  正在執行!");
    }
}


在這裏插入圖片描述

  • 修改上面的截圖:
    在這裏插入圖片描述

6.測試

在這裏插入圖片描述
在這裏插入圖片描述

◇SpringBoot整合Quartz的代碼

1.創建項目

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.添加依賴


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zcw</groupId>
    <artifactId>springboot-quartz</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-quartz</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


在這裏插入圖片描述


spring.quartz.scheduler-name=mySpringbootQuartz
# 單機版,使用這個,如果集羣需要後面參數改爲jdbc(單機也可以使用)
spring.quartz.job-store-type=memory
spring.quartz.overwrite-existing-jobs=true

3.編寫Job類,繼承QuartzJobBean

  • 實現ExecuteInternal方法
package com.zcw.springbootquartz.job;

import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

/**
 * @ClassName : MyJob
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-06-12 13:10
 */
@Slf4j
public class MyJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("我正在執行!");
    }
}


4.編寫Job的配置類

  • 編寫JobDetail的Bean
  • 配置Trigger的Bean
package com.zcw.springbootquartz.config;

import com.zcw.springbootquartz.job.MyJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName : QuartzConfig
 * @Description : 定時任務相關屬性配置
 * @Author : Zhaocunwei
 * @Date: 2020-06-12 13:11
 */
@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail myJobDetail(){
        JobDetail detail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob1","group1")
                .storeDurably()
                .build();
        return detail;
    }
    //創建Trigger
    @Bean
    public Trigger myTrigger1(){
        Trigger trigger = TriggerBuilder.newTrigger()
                .startNow()
                .withIdentity("trigger1","group1")
                .forJob(myJobDetail())
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)
                .repeatForever()).build();
        return trigger;

    }
}


5.測試:

在這裏插入圖片描述
- 上面是使用內存的方式進行,下面開始使用數據庫方式進行調整:

在這裏插入圖片描述

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

  • 修改配置文件
spring.quartz.scheduler-name=mySpringbootQuartz
# 單機版,使用這個,如果集羣需要後面參數改爲jdbc(單機也可以使用)
spring.quartz.job-store-type=memory
spring.quartz.overwrite-existing-jobs=true

spring.datasource.url=jdbc:mysql://localhost:3306/order?serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=root


在這裏插入圖片描述

  • 數據庫初始化的地方
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 測試查看是否生成表
    在這裏插入圖片描述
    在這裏插入圖片描述

spring.quartz.scheduler-name=mySpringbootQuartz
# 單機版,使用這個,如果集羣需要後面參數改爲jdbc(單機也可以使用)
spring.quartz.job-store-type=memory
spring.quartz.overwrite-existing-jobs=true
# 配置這個地方需要慎重,因爲每次都會查看此屬性,
spring.quartz.jdbc.initialize-schema=always
spring.quartz.wait-for-jobs-to-complete-on-shutdown=true
# 修改源代碼中sql文件的註釋
spring.quartz.jdbc.comment-prefix=#


spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/order?serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
logging.pattern.dateformat=HH:mm:ss



在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章