解决elastic-console在项目部署启动之后没有触发按钮:https://blog.csdn.net/qq_31289187/article/details/86355924
一、elastic-job是当当网开源的分布式框架,实际生产中使用elastic-job做一些定时任务,比如定时生成文件、上传文件、发送邮件、发送短信等等。
二、我的环境
1、java version 1.8.0_161
2、Apache Maven 3.5.0
3、zookeeper3-4-10 zookeeper安装使用,Windows环境下安装类似Linux环境安装
三、案例
1、引入jar包
4.0.0
elasticJobDemo
elasticJobDemo
1.0-SNAPSHOT
com.dangdang
elastic-job-lite-core
2.1.5
com.dangdang
elastic-job-lite-spring
2.1.5
org.springframework
spring-context
5.1.2.RELEASE
2、JobA
package com.cn.dl.job;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
/**
* Created by yanshao on 2018/12/5.
*/
public class JobA implements SimpleJob {
public void execute(ShardingContext shardingContext) {
System.out.println("JobA>>>>>>>");
}
}
3、JobB
package com.cn.dl.job;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
/**
* Created by yanshao on 2018/12/5.
*/
public class JobB implements SimpleJob {
public void execute(ShardingContext shardingContext) {
System.out.println("JobB>>>>getJobName>>>"+shardingContext.getJobName());
System.out.println("JobB>>>getShardingParameter>>>>"+shardingContext.getShardingParameter());
System.out.println("JobB>>>>getTaskId>>>"+shardingContext.getTaskId());
System.out.println("JobB>>>>getShardingItem>>>"+shardingContext.getShardingItem());
System.out.println("JobB>>>>getShardingTotalCount>>>"+shardingContext.getShardingTotalCount());
}
}
4、ApplicationJob
package com.cn.dl.main;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by yanshao on 2018/12/5.
*/
public class ApplicationJob {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("application-job-config.xml");
}
}
5、application-job-config.xml
6、测试
a、JobA每隔10s执行一次
time>>Wed Dec 05 21:10:00 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:10:10 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:10:20 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:10:30 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:10:40 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:10:50 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:11:00 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:11:10 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:11:20 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:11:30 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:11:40 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:11:50 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:12:00 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:12:10 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:12:20 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:12:30 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:12:40 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:12:50 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:13:00 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:13:10 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:13:20 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:13:30 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:13:40 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:13:50 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:14:00 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:14:10 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:14:20 CST 2018 JobA>>>>>>>
time>>Wed Dec 05 21:14:30 CST 2018 JobA>>>>>>>
JobB到凌晨4点执行一次
四、elastic-job-lite-console控制台
1、下载elastic-job源代码,地址:https://github.com/elasticjob/elastic-job-lite
2、解压在指定目录,然后编译生成elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz压缩包
我们在zookeeper注册中心可以看到我们配置的内容:cron="0/10 * * * * ? *"
比如我在console中把jobA的Cron表达式修改为:cron="0 0 12 * * ? *",然后重新获取值,发现cron的值修改了!
然后就只有jobB继续每隔10s执行一次了
同样我们可以修改其它内容,zookeeper中的节点内容就会被修改;
触发按钮是我们点击一次,任务就会执行一次;
点击失效,任务暂时不能执行,然后点击生效才会继续在固定时间执行任务;
点击终止,该任务就没有生效一说了,当前任务就下线了,如果想要继续在固定时间执行任务,只能restart 项目了。
ShardingContext 对象有这几个主要方法,主要是为了应对一个job中不同的执行任务,比如:我们要给用户发送邮件,我们把用户分成A、B两组,两组邮件除了邮件主题不同,其它内容都相同,这时候我们可以通过配置sharding-item-parameters来进行区分两组邮件,然后同时给用户发送邮件。
IDE打印结果:
到这里本地使用elastic-job就差不多了,看看当当网的文档,自己再试试。还有一个问题,我们如何将这个Demo打成jar包扔在Linux服务器上执行?elastic-job-console不需要再折腾了,扔上去执行启动脚本就OK了,还有就是elastic-job-console我们可以修改密码和端口号,我是用winrar打开修改的。