由于项目中定时任务采用了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项目
后续步骤就不详细说明了,自己动手百度之。
创建好的项目
调整下项目结构,file->project structure->modules
引入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
创建项目相关文件,项目结构如下:
首先配置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,需要注意的是,版本的控制需要注意,建议跟随官方文档。
启动项目:
以下显示成功启动,最后会有一些注册job的信息打印出
至此项目基本启动到定时任务的实现就完成了,结果如下:
zookeeper中任务节点信息如下:
接下来就说明eql与spring的结合
先说说eql轻量级框架的,个人认为,有错误请大家评论指出
eql是零侵入的一个框架,与spring的集合不像mybatis、hibernate那样一样需要过多的配置文件,只需要在指定目录建立指定的文件夹即可项目结构如下所示:
首先创建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
创建定时任务:
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的控制台:
由于是本地,就win启动了
默认的端口就是8899,直接访问 http://localhost:8899/
账户密码就是配置文件里边配置的,
添加我们启动的定时任务
链接的信息就是项目中配置zookeeper的注册信息
注册好后就连接,切换到作业操作就可以操作自己的任务
到此,一个定时任务的全部完成,由于网上资料较少,自己写了,有什么问题欢迎指出,
知识无界限,一起学习一起进步。
源码地址
链接: https://pan.baidu.com/s/1OJHBlHB2GtTncAIuN0rveg 提取码: fydr