Use docker deploy elasticjob-lite
使用 docker 部署 elasticjob-lite
部署注册中心zookeeper
拉取镜像:
1
docker pull zookeeper:latest
运行容器:
1
docker run --name zookeeper --restart always -p 2181:2181 -d zookeeper:latest
部署管理端面板elasticjob-lite-ui
拉取镜像:
1
docker pull apache/shardingsphere-elasticjob-lite-ui:latest
运行容器:
1
docker run --name elasticjob-lite-ui --restart always -p 8088:8088 -d apache/shardingsphere-elasticjob-lite-ui:latest
搭建elasticjob-lite后端服务
初始化
SpringBoot工程项目集成
elasticjob-litepom.xml添加依赖:1
2
3
4
5
6
7
8
9
10
11
12
13
14<properties>
...
<elasticjob-lite.version>3.0.1</elasticjob-lite.version>
</properties>
<dependencies>
...
<!-- elasticjob-lite-spring-boot 依赖 -->
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
<version>${elasticjob-lite.version}</version>
</dependency>
</dependencies>application.yamll配置elasticjob-lite数据库类型、注册中心地址包括命名空间:1
2
3
4
5
6elasticjob:
tracing:
type: RDB
reg-center:
server-lists: ${ZK_HOST:}:${ZK_PORT:}
namespace: ${ZK_NAMESPACE}
编写定时任务
编写实现
SimpleJob接口的指定任务类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17@Component
public class DemoJob implements SimpleJob {
private final Logger logger = LoggerFactory.getLogger(DemoJob.class);
@Override
public void execute(ShardingContext shardingContext) {
logger.info("[DemoJob] 调度任务开始...");
try {
logger.info("[DemoJob] 调度任务:正在执行调度任务...");
Thread.sleep(2000);
} catch (InterruptedException e) {
logger.error("[DemoJob] 调度出现异常... 信息:{}", e.toString());
}
logger.info("[DemoJob] 调度任务结束...");
}
}application.yaml配置指定定时任务:1
2
3
4
5
6
7
8elasticjob:
jobs:
demoJob: ## 指定定时任务名称
elasticJobClass: com.garden.jobs.DemoJob ## 指定定时任务的全限定类名
cron: 0 0 1 * * ? ## 定时cron表达式
shardingTotalCount: 1 ## 分片数量
disabled: true ## 是否启动时生效
overwrite: false ## 是否可覆盖
集成
docker-maven打包.m2/setting.xml文件添加spotify插件组:1
2...
<pluginGroups><pluginGroup>com.spotify</pluginGroup></pluginGroups>pom.xml排除默认的打包目标以及新增docker-maven-plugin:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49<properties>
...
<dockerfile-maven-plugin.version>1.4.13</dockerfile-maven-plugin.version>
<repository-name>garden12138</repository-name>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.garden.JobsApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- dockerfile-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 设置镜像名称格式,由仓库项目名与构件ID组合 -->
<repository>${repository-name}/${artifactId}</repository>
<!-- 设置镜像版本号 -->
<tag>${project.version}</tag>
<!-- 设置镜像构件过程中的环境变量,如Jar文件名 -->
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
部署elasticjob-lite后端服务
编写
Dockerfile:1
2
3
4
5FROM java:8
VOLUME /tmp
ARG JAR_FILE
ADD target/${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]打包
elasticjob-lite后端服务:1
mvn clean package dockerfile:build
运行
elasticjob-lite后端服务:1
docker run --name ${CONTAINER_NAME} --restart=always -d -e ZK_HOST=$(docker inspect --format='{{(index (index .NetworkSettings.IPAddress))}}' ${ZK_NAME}) -e ZK_PORT=${ZK_PORT} ${IMG_NAME}:${IMG_VERSION}
使用elasticjob-lite
登录管理端面板:
1
2
3
4## 访问地址:
http://159.75.138.212:8088/index.html#/login
## 账号密码:
root/root创建并链接注册中心:
设置定时任务生效:
若设置生效后处于分片待调整状态,可将
cron表达式更新为当前可触发时间(如* * * * *)使状态变为正常,然后再将原本cron表达式更新:
参考文献
Running docker container : iptables: No chain/target/match by that name
1
2
3sudo iptables -t filter -F
sudo iptables -t filter -X
systemctl restart docker
示例代码
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 后端学习手记!










