【快速掌握】Spring整合Elastic-Job分佈式定時任務框架

前言

快速掌握基於spring框架整合Elastic-Job框架


Spring的schema整合Simple

  • 創建maven+spring項目
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 導入依賴jar包

<?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-elasticjobl</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>spring-elasticjobl 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>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring.version>5.1.5.RELEASE</spring.version>
    <elasticjob.version>2.1.5</elasticjob.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--spring引用上下文-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring web-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--elastic-job-->
    <dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-core</artifactId>
      <version>${elasticjob.version}</version>
    </dependency>
    <dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-spring</artifactId>
      <version>${elasticjob.version}</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.6</version>
      <!--項目運行後不會依賴這個jar包,打包時會自動生成get,set方法-->
      <scope>provided</scope>
    </dependency>
    <!--引入日誌適配器-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.26</version>
    </dependency>
  </dependencies>

 <build>
   <finalName>spring-elasticjob</finalName>
 </build>
</project>


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


<?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
       http://www.dangdang.com/schema/ddframe/reg
       http://www.dangdang.com/schema/ddframe/reg/reg.xsd
       http://www.dangdang.com/schema/ddframe/job
       http://www.dangdang.com/schema/ddframe/job/job.xsd
">

</beans>

  • 在web.xml配置Listener,監聽Spring容器
    在這裏插入圖片描述
<!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-elasticjob</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文件中,配置zk註冊中心,配置Simple作業

<?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:reg="http://www.dangdang.com/schema/ddframe/reg"
       xmlns:job="http://www.dangdang.com/schema/ddframe/job"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.dangdang.com/schema/ddframe/reg
       http://www.dangdang.com/schema/ddframe/reg/reg.xsd
       http://www.dangdang.com/schema/ddframe/job
       http://www.dangdang.com/schema/ddframe/job/job.xsd
">
<!--註冊中心配置-->
  <reg:zookeeper server-lists="localhost:2181" namespace="spring-elasticjob" id="zkCenter"/>
    <!--simple作業配置-->
    <job:simple registry-center-ref="zkCenter" cron="0/10 * * * * ?" sharding-total-count="2"
                class="com.zcw.job.MySimpleJob"/>
</beans>



<?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-elasticjobl</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>spring-elasticjobl 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>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring.version>5.1.5.RELEASE</spring.version>
    <elasticjob.version>2.1.5</elasticjob.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--spring引用上下文-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring web-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--elastic-job-->
    <dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-core</artifactId>
      <version>${elasticjob.version}</version>
    </dependency>
    <dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-spring</artifactId>
      <version>${elasticjob.version}</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.6</version>
      <!--項目運行後不會依賴這個jar包,打包時會自動生成getset方法-->
      <scope>provided</scope>
    </dependency>
    <!--引入日誌適配器-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.26</version>
    </dependency>
  </dependencies>

 <build>
   <finalName>spring-elasticjob</finalName>
   <plugins>
     <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>



在這裏插入圖片描述

  • 打成war包,放入Tomcat啓動Elastic-Job定時任務
    啓動zookeeper:單機版
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    友情提示:】使用Tomcat-Maven 插件時,修改端口號
tomcat7:run -f pom.xml -Dmaven.tomcat.port=8022

在這裏插入圖片描述

Spring的schema整合Dataflow

  • 創建類

package com.zcw.job;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.dataflow.DataflowJob;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName : MyDataflowJob
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-06-05 14:22
 */
public class MyDataflowJob implements DataflowJob<Integer> {
    private List<Integer> list = new ArrayList<>();
    {
        list.add(0);
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);

    }
    @Override
    public List<Integer> fetchData(ShardingContext shardingContext) {
        //數字 % 分片總數 == 當前分片項
        List<Integer> integers = new ArrayList<>();
        for(Integer index: list){
            if(index % shardingContext.getShardingTotalCount() == shardingContext.getShardingItem()){
                integers.add(index);
                break;
            }
        }
        System.out.println("我是分片項:"+shardingContext.getShardingItem()+",我獲取的數據是:"+integers);
        return integers;
    }

    @Override
    public void processData(ShardingContext shardingContext, List<Integer> data) {
        list.removeAll(data);
        System.out.println("我是分片項:"+shardingContext.getShardingItem()+",我移除數據是:"+data);
    }
}


  • 配置dataflow–spring-config.xml
    在這裏插入圖片描述
<?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:reg="http://www.dangdang.com/schema/ddframe/reg"
       xmlns:job="http://www.dangdang.com/schema/ddframe/job"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.dangdang.com/schema/ddframe/reg
       http://www.dangdang.com/schema/ddframe/reg/reg.xsd
       http://www.dangdang.com/schema/ddframe/job
       http://www.dangdang.com/schema/ddframe/job/job.xsd
">
<!--註冊中心配置-->
  <reg:zookeeper server-lists="localhost:2181" namespace="spring-elasticjob" id="zkCenter"/>
    <!--simple作業配置-->
    <job:simple id="mySimpleJob" registry-center-ref="zkCenter" cron="0/10 * * * * ?" sharding-total-count="2"
                class="com.zcw.job.MySimpleJob" overwrite="true"/>
  <!--Dataflow作業-->
  <job:dataflow id="myDataflowJob" registry-center-ref="zkCenter" cron="0/10 * * * * ?" sharding-total-count="2"
                class="com.zcw.job.MyDataflowJob" overwrite="true" streaming-process="true"/>

</beans>

  • 測試
    在這裏插入圖片描述
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章