一、elastic-job、elastic-job-lite-console使用案例
- 關於配置檔案每個屬性的作用、怎麼配置,參考噹噹網提供的文件就OK了
- elastic-job原始碼
- 配置郵件有cron表示式,如果不瞭解的,有一個生成cron表示式神器
一、elastic-job是噹噹網開源的分散式框架,實際生產中使用elastic-job做一些定時任務,比如定時生成檔案、上傳檔案、傳送郵件、傳送簡訊等等。
二、我的環境
1、java version 1.8.0_161
2、Apache Maven 3.5.0
3、zookeeper3-4-10
三、案例
1、引入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>elasticJobDemo</groupId> <artifactId>elasticJobDemo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-spring</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.2.RELEASE</version> </dependency> </dependencies> </project>
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
<?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 id="jobRegister" server-lists="127.0.0.1:2181" namespace="elasticJobDemo"
base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3"/>
<job:simple id="jobA"
class="com.cn.dl.job.JobA"
registry-center-ref="jobRegister"
cron="0/10 * * * * ? *"
sharding-total-count="1"/>
<job:simple id="jobB"
class="com.cn.dl.job.JobB"
registry-center-ref="jobRegister"
cron="0 0 04 * * ? *"
sharding-total-count="1"/>
</beans>
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壓縮包
- 我解壓在:E:\elasticejob\elastic-job-lite-dev
- 開發人員一般都安裝了git,如果沒有git,開啟命令列也是一樣的
- 執行命令:mvn clean install -Dmaven.test.skip=true,等大概5分鐘左右就會編譯生成,看到Build Success就OK
- 然後在E:\elasticejob\elastic-job-lite-dev\elastic-job-lite-console\target下,找到生成的elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz壓縮包
- 解壓elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz到指定目錄
- 然後在解壓目錄下找到兩個啟動指令碼,一個是Windows的,一個Linxu的
- 雙擊start.bat啟動console
- 在瀏覽器中輸入http://127.0.0.1:8899/,輸入使用者和密碼,預設都是root
- 全域性配置,前三個框分別輸入:jobRegister、127.0.0.1:2181、elasticJobDemo
- 點選連線
- 開啟作業維度,就看到當前兩個任務了(前提是啟動了ApplicationJob)
- 這裡的修改按鈕:我們可以修改配置在application-job-config.xml中的配置,一般我們只會修改Cron表示式
zookeeper命令:https://blog.csdn.net/qq_31289187/article/details/80933365
我們在zookeeper註冊中心可以看到我們配置的內容:cron="0/10 * * * * ? *"
比如我在console中把jobA的Cron表示式修改為:cron="0 0 12 * * ? *",然後重新獲取值,發現cron的值修改了!
然後就只有jobB繼續每隔執行一次了
同樣我們可以修改其它內容,zookeeper中的節點內容就會被修改;
觸發按鈕是我們點選一次,任務就會執行一次;
點選失效,任務暫時不能執行,然後點選生效才會繼續在固定時間執行任務;
點選終止,該任務就沒有生效一說了,當前任務就下線了,如果想要繼續在固定時間執行任務,只能restart 專案了。
-
ShardingContext 物件有這幾個主要方法,主要是為了應對一個job中不同的執行任務,比如:我們要給使用者傳送郵件,我們把使用者分成A、B兩組,兩組郵件除了郵件主題不同,其它內容都相同,這時候我們可以通過配置sharding-item-parameters來進行區分兩組郵件,然後同時給使用者傳送郵件。
- 修改elastic-job-console中jobB的配置
IDE列印結果:
到這裡本地使用elastic-job就差不多了,看看噹噹網的文件,自己再試試。還有一個問題,我們如何將這個Demo打成jar包扔在Linux伺服器上執行?elastic-job-console不需要再折騰了,扔上去執行啟動指令碼就OK了,還有就是elastic-job-console我們可以修改密碼和埠號,我是用winrar開啟修改的。