Elastic-Job-Lite结合spring+eql实现定时任务

由于项目中定时任务采用了elasticjob+spring+eql,自己就学习分享下。

1、elasticjob

官网资料:  http://elasticjob.io/

2、没啥说明的,还是简单说说

先说说开发环境:win10、idea、tomcat8、jdk1.8

开发工具版本:


    UTF-8
    1.8
    1.8
    4.3.0.RELEASE
    2.1.5
    3.4.8

jar包maven地址:http://www.mvnjar.com/org.apache.zookeeper/zookeeper/jar.html

后续需要什么包自己动手搜,选择自己版本添加到pom

3、动手实现

idea创建springmvc项目

Elastic-Job-Lite结合spring+eql实现定时任务_第1张图片

后续步骤就不详细说明了,自己动手百度之。

创建好的项目

Elastic-Job-Lite结合spring+eql实现定时任务_第2张图片

调整下项目结构,file->project structure->modules

Elastic-Job-Lite结合spring+eql实现定时任务_第3张图片

引入jar:pom文件如下

 




    4.0.0

    com.study
    elastic-job-project
    1.0-SNAPSHOT
    war

    elastic-job-project Maven Webapp
    
    http://www.example.com

    
        UTF-8
        1.8
        1.8
        4.3.0.RELEASE
        2.1.5
        3.4.10
    

    
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
        
            com.dangdang
            elastic-job-lite-core
            ${job.version}
        
        
            com.dangdang
            elastic-job-lite-spring
            ${job.version}
        
        
        
            org.apache.logging.log4j
            log4j-core
            2.6.1
        
        
        
            org.slf4j
            slf4j-log4j12
            1.6.6
            test
        
        
            org.slf4j
            slf4j-log4j12
            1.7.5
        
        
        
            mysql
            mysql-connector-java
            5.1.38
        
        
            c3p0
            c3p0
            0.9.1.2
        
        
        
            com.github.bingoohuang
            eql
            0.0.91
        

        
        
        
        
            com.alibaba
            fastjson
            1.2.51
        
        
        
            org.apache.zookeeper
            zookeeper
            ${zk.version}
        
    

    
        elastic-job-project
        
            
                
                    maven-clean-plugin
                    3.0.0
                
                
                
                    maven-resources-plugin
                    3.0.2
                
                
                    maven-compiler-plugin
                    3.7.0
                
                
                    maven-surefire-plugin
                    2.20.1
                
                
                    maven-war-plugin
                    3.2.0
                
                
                    maven-install-plugin
                    2.5.2
                
                
                    maven-deploy-plugin
                    2.8.2
                
            
        
    

 

创建项目相关文件,项目结构如下:

Elastic-Job-Lite结合spring+eql实现定时任务_第4张图片

首先配置spring的配置文件:spring.xml




    
    
    

    
    

接下来配置:elastic-job-config.xml




    
    
    

说明:elasticjob依赖于zookeeper的,要注册信息到zookeeper,各个参数的意义可以参考:http://elasticjob.io/docs/elastic-job-lite/02-guide/config-manual/

其中的  2. Spring命名空间配置

先实现demo:

简单任务:

package com.study.job.demo.job;

import com.alibaba.fastjson.JSON;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * 简单任务,实现接口 SimpleJob
 */
@Component
public class DemoSimpleJob implements SimpleJob {
    private static final Logger log = LoggerFactory.getLogger(DemoSimpleJob.class);

    @Override
    public void execute(ShardingContext shardingContext) {
        log.info("进入当前简单任务");
        log.info("简单任务,ShardingContext信息:" + JSON.toJSONString(shardingContext));
    }
}

流式任务:

package com.study.job.demo.job;

import com.alibaba.fastjson.JSON;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.dataflow.DataflowJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 流式处理任务,实现接口 DataflowJob
 */
@Component
public class DemoDataFlowJob implements DataflowJob {
    private static final Logger log = LoggerFactory.getLogger(DemoDataFlowJob.class);

    @Override
    public List fetchData(ShardingContext shardingContext) {
        log.info("进入当前--流式--任务");
        log.info("流式--任务,ShardingContext信息:" + JSON.toJSONString(shardingContext));

        /**
         *  当此方法返回为空或者size=0的时候,不会执行下边的processData
         */
        return null;
    }

    @Override
    public void processData(ShardingContext shardingContext, List list) {

    }
}

 

配置任务到:elastic-job-config.xml




    
    
    
    
    
    

说明:各个类型任务的参数说明就不细说,

各个参数的意义可以参考:http://elasticjob.io/docs/elastic-job-lite/02-guide/config-manual/

其中的  2. Spring命名空间配置

zookeeper的搭建,这就不过多的说明zookeeper的搭建了,本次采用的单机zk,需要注意的是,版本的控制需要注意,建议跟随官方文档。

启动项目:

Elastic-Job-Lite结合spring+eql实现定时任务_第5张图片

以下显示成功启动,最后会有一些注册job的信息打印出

Elastic-Job-Lite结合spring+eql实现定时任务_第6张图片

至此项目基本启动到定时任务的实现就完成了,结果如下:

Elastic-Job-Lite结合spring+eql实现定时任务_第7张图片

zookeeper中任务节点信息如下:

Elastic-Job-Lite结合spring+eql实现定时任务_第8张图片

 

 

接下来就说明eql与spring的结合

先说说eql轻量级框架的,个人认为,有错误请大家评论指出

eql是零侵入的一个框架,与spring的集合不像mybatis、hibernate那样一样需要过多的配置文件,只需要在指定目录建立指定的文件夹即可项目结构如下所示:

Elastic-Job-Lite结合spring+eql实现定时任务_第9张图片

 

首先创建bean:

package com.study.job.demo.bean;

/**
 * 展示插入数据库 demo bean
 */
public class UserBean {
    private String userName;
    private int userAge;
    private String userSex;

    public UserBean(String userName, int userAge, String userSex) {
        this.userName = userName;
        this.userAge = userAge;
        this.userSex = userSex;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }
}

数据库连接文件,eql-DEFAULT.properties

Elastic-Job-Lite结合spring+eql实现定时任务_第10张图片

创建定时任务:

package com.study.job.demo.job;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.study.job.demo.bean.UserBean;
import org.n3r.eql.Eql;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * 展示 eql的使用的 demo
 */
@Component
public class UserJob implements SimpleJob {
    private static final Logger log = LoggerFactory.getLogger(UserJob.class);

    @Override
    public void execute(ShardingContext shardingContext) {
        log.info("测试sql的数据库连接:");
        /**
         *  仅做展示
         */
        for (int i = 0; i < 10; i++) {
            UserBean userBean = new UserBean("demo" + i, i, i % 2 == 0 ? "man" : "woman");
            new Eql().insert("insertUser").params(userBean).execute();
        }

        /**
         * eql 详细用法参考
         *
         *  https://github.com/bingoohuang/eql
         */

    }
}

对应的eql文件 UserJob.eql

--[insertUser]
insert into user(user_name,user_age,user_sex)
values(#userName#,#userAge#,#userSex#);

配置到定时任务,elastic-job-config.xml

启动项目:

Elastic-Job-Lite结合spring+eql实现定时任务_第11张图片

 

查看数据库信息:

Elastic-Job-Lite结合spring+eql实现定时任务_第12张图片

 

到此,基本的使用流程已经完成,接下来给大家展示下elastic-job的控制台:

Elastic-Job-Lite结合spring+eql实现定时任务_第13张图片

Elastic-Job-Lite结合spring+eql实现定时任务_第14张图片

 

由于是本地,就win启动了

Elastic-Job-Lite结合spring+eql实现定时任务_第15张图片

默认的端口就是8899,直接访问  http://localhost:8899/

账户密码就是配置文件里边配置的,

Elastic-Job-Lite结合spring+eql实现定时任务_第16张图片

 

添加我们启动的定时任务

Elastic-Job-Lite结合spring+eql实现定时任务_第17张图片

 

Elastic-Job-Lite结合spring+eql实现定时任务_第18张图片

链接的信息就是项目中配置zookeeper的注册信息

注册好后就连接,切换到作业操作就可以操作自己的任务

Elastic-Job-Lite结合spring+eql实现定时任务_第19张图片

 

到此,一个定时任务的全部完成,由于网上资料较少,自己写了,有什么问题欢迎指出,

知识无界限,一起学习一起进步。

 

源码地址

链接: https://pan.baidu.com/s/1OJHBlHB2GtTncAIuN0rveg 提取码: fydr

你可能感兴趣的:(java,eql,定时任务,spring)