mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
Merge branch 'v3.3.3' into jenkins_auto_build
This commit is contained in:
commit
fb57234734
19
README.md
19
README.md
@ -26,7 +26,7 @@ PowerJob(原OhMyScheduler)是全新一代分布式调度与计算框架,
|
|||||||
* 有定时执行需求的业务场景:如每天凌晨全量同步数据、生成业务报表等。
|
* 有定时执行需求的业务场景:如每天凌晨全量同步数据、生成业务报表等。
|
||||||
* 有需要全部机器一同执行的业务场景:如使用广播执行模式清理集群日志。
|
* 有需要全部机器一同执行的业务场景:如使用广播执行模式清理集群日志。
|
||||||
* 有需要分布式处理的业务场景:比如需要更新一大批数据,单机执行耗时非常长,可以使用Map/MapReduce处理器完成任务的分发,调动整个集群加速计算。
|
* 有需要分布式处理的业务场景:比如需要更新一大批数据,单机执行耗时非常长,可以使用Map/MapReduce处理器完成任务的分发,调动整个集群加速计算。
|
||||||
* 有需要延迟执行某些任务的业务场景:比如订单过期处理等。
|
* 有需要**延迟执行**某些任务的业务场景:比如订单过期处理等。
|
||||||
|
|
||||||
### 设计目标
|
### 设计目标
|
||||||
PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的**任务调度中间件**。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 `powerjob-worker` 即可接入调度中心获取任务调度与分布式计算能力。
|
PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的**任务调度中间件**。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 `powerjob-worker` 即可接入调度中心获取任务调度与分布式计算能力。
|
||||||
@ -43,7 +43,7 @@ PowerJob 的设计目标为企业级的分布式任务调度平台,即成为
|
|||||||
| -------------- | ------------------------ | ---------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------ |
|
| -------------- | ------------------------ | ---------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------ |
|
||||||
| 定时类型 | CRON | CRON | CRON、固定频率、固定延迟、OpenAPI | **CRON、固定频率、固定延迟、OpenAPI** |
|
| 定时类型 | CRON | CRON | CRON、固定频率、固定延迟、OpenAPI | **CRON、固定频率、固定延迟、OpenAPI** |
|
||||||
| 任务类型 | 内置Java | 内置Java、GLUE Java、Shell、Python等脚本 | 内置Java、外置Java(FatJar)、Shell、Python等脚本 | **内置Java、外置Java(容器)、Shell、Python等脚本** |
|
| 任务类型 | 内置Java | 内置Java、GLUE Java、Shell、Python等脚本 | 内置Java、外置Java(FatJar)、Shell、Python等脚本 | **内置Java、外置Java(容器)、Shell、Python等脚本** |
|
||||||
| 分布式任务 | 无 | 静态分片 | MapReduce动态分片 | **MapReduce动态分片** |
|
| 分布式计算 | 无 | 静态分片 | MapReduce动态分片 | **MapReduce动态分片** |
|
||||||
| 在线任务治理 | 不支持 | 支持 | 支持 | **支持** |
|
| 在线任务治理 | 不支持 | 支持 | 支持 | **支持** |
|
||||||
| 日志白屏化 | 不支持 | 支持 | 不支持 | **支持** |
|
| 日志白屏化 | 不支持 | 支持 | 不支持 | **支持** |
|
||||||
| 调度方式及性能 | 基于数据库锁,有性能瓶颈 | 基于数据库锁,有性能瓶颈 | 不详 | **无锁化设计,性能强劲无上限** |
|
| 调度方式及性能 | 基于数据库锁,有性能瓶颈 | 基于数据库锁,有性能瓶颈 | 不详 | **无锁化设计,性能强劲无上限** |
|
||||||
@ -52,20 +52,21 @@ PowerJob 的设计目标为企业级的分布式任务调度平台,即成为
|
|||||||
| DAG工作流 | 不支持 | 不支持 | 支持 | **支持** |
|
| DAG工作流 | 不支持 | 不支持 | 支持 | **支持** |
|
||||||
|
|
||||||
|
|
||||||
# 文档
|
# 官方文档
|
||||||
**[中文文档](https://www.yuque.com/powerjob/guidence/ztn4i5)**
|
**[中文文档](https://www.yuque.com/powerjob/guidence/ztn4i5)**
|
||||||
|
|
||||||
**[Document](https://www.yuque.com/powerjob/en/xrdoqw)**
|
**[Document](https://www.yuque.com/powerjob/en/xrdoqw)**
|
||||||
|
|
||||||
PS:感谢文档翻译平台[breword](https://www.breword.com/)对本项目英文文档翻译做出的巨大贡献!
|
PS:感谢文档翻译平台[breword](https://www.breword.com/)对本项目英文文档翻译做出的巨大贡献!
|
||||||
|
|
||||||
# 参考
|
# 接入登记
|
||||||
>Alibaba SchedulerX 2.0
|
[点击进行接入登记,为 PowerJob 的发展贡献自己的力量!](https://github.com/KFCFans/PowerJob/issues/6)
|
||||||
|
|
||||||
* [Akka 框架](https://yq.aliyun.com/articles/709946?spm=a2c4e.11153959.teamhomeleft.67.6a0560c9bZEnZq):不得不说,akka-remote简化了相当大一部分的网络通讯代码。
|
ღ( ´・ᴗ・\` )ღ 感谢以下接入用户的大力支持 ღ( ´・ᴗ・\` )ღ
|
||||||
* [执行器架构设计](https://yq.aliyun.com/articles/704121?spm=a2c4e.11153959.teamhomeleft.97.371960c9qhB1mB):这篇文章反而不太认同,感觉我个人的设计更符合Yarn的“架构”。
|
|
||||||
* [MapReduce模型](https://yq.aliyun.com/articles/706820?spm=a2c4e.11153959.teamhomeleft.83.6a0560c9bZEnZq):想法很Cool,大数据处理框架都是处理器向数据移动,但对于传统Java应用来说,数据向处理器移动也未尝不可,这样还能使框架的实现变得简单很多。
|
<p align="center">
|
||||||
* [广播执行](https://yq.aliyun.com/articles/716203?spm=a2c4e.11153959.teamhomeleft.40.371960c9qhB1mB):运行清理日志脚本什么的,也太实用了8~
|
<img src="https://raw.githubusercontent.com/KFCFans/PowerJob/master/others/images/user.png" alt="PowerJob User" title="PowerJob User"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
# 其他
|
# 其他
|
||||||
* 开源许可证:Apache License, Version 2.0
|
* 开源许可证:Apache License, Version 2.0
|
||||||
|
BIN
others/images/user.png
Normal file
BIN
others/images/user.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 618 KiB |
@ -10,13 +10,13 @@
|
|||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>powerjob-client</artifactId>
|
<artifactId>powerjob-client</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<junit.version>5.6.1</junit.version>
|
<junit.version>5.6.1</junit.version>
|
||||||
<fastjson.version>1.2.68</fastjson.version>
|
<fastjson.version>1.2.68</fastjson.version>
|
||||||
<powerjob.common.version>3.3.2</powerjob.common.version>
|
<powerjob.common.version>3.3.3</powerjob.common.version>
|
||||||
|
|
||||||
<mvn.shade.plugin.version>3.2.4</mvn.shade.plugin.version>
|
<mvn.shade.plugin.version>3.2.4</mvn.shade.plugin.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -2,6 +2,7 @@ package com.github.kfcfans.powerjob.client;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.github.kfcfans.powerjob.common.InstanceStatus;
|
import com.github.kfcfans.powerjob.common.InstanceStatus;
|
||||||
|
import com.github.kfcfans.powerjob.common.OmsConstant;
|
||||||
import com.github.kfcfans.powerjob.common.OpenAPIConstant;
|
import com.github.kfcfans.powerjob.common.OpenAPIConstant;
|
||||||
import com.github.kfcfans.powerjob.common.PowerJobException;
|
import com.github.kfcfans.powerjob.common.PowerJobException;
|
||||||
import com.github.kfcfans.powerjob.common.request.http.SaveJobInfoRequest;
|
import com.github.kfcfans.powerjob.common.request.http.SaveJobInfoRequest;
|
||||||
@ -283,7 +284,7 @@ public class OhMyClient {
|
|||||||
*/
|
*/
|
||||||
public ResultDTO<Long> saveWorkflow(SaveWorkflowRequest request) throws PowerJobException {
|
public ResultDTO<Long> saveWorkflow(SaveWorkflowRequest request) throws PowerJobException {
|
||||||
request.setAppId(appId);
|
request.setAppId(appId);
|
||||||
MediaType jsonType = MediaType.parse("application/json; charset=utf-8");
|
MediaType jsonType = MediaType.parse(OmsConstant.JSON_MEDIA_TYPE);
|
||||||
// 中坑记录:用 FastJSON 序列化会导致 Server 接收时 pEWorkflowDAG 为 null,无语.jpg
|
// 中坑记录:用 FastJSON 序列化会导致 Server 接收时 pEWorkflowDAG 为 null,无语.jpg
|
||||||
String json = JsonUtils.toJSONStringUnsafe(request);
|
String json = JsonUtils.toJSONStringUnsafe(request);
|
||||||
String post = postHA(OpenAPIConstant.SAVE_WORKFLOW, RequestBody.create(jsonType, json));
|
String post = postHA(OpenAPIConstant.SAVE_WORKFLOW, RequestBody.create(jsonType, json));
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>powerjob-common</artifactId>
|
<artifactId>powerjob-common</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -15,4 +15,6 @@ public class OmsConstant {
|
|||||||
|
|
||||||
public static final String COMMA = ",";
|
public static final String COMMA = ",";
|
||||||
public static final String LINE_SEPARATOR = "\r\n";
|
public static final String LINE_SEPARATOR = "\r\n";
|
||||||
|
|
||||||
|
public static final String JSON_MEDIA_TYPE = "application/json; charset=utf-8";
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package com.github.kfcfans.powerjob.common.utils;
|
package com.github.kfcfans.powerjob.common.utils;
|
||||||
|
|
||||||
import okhttp3.OkHttpClient;
|
import com.github.kfcfans.powerjob.common.PowerJobException;
|
||||||
import okhttp3.Request;
|
import okhttp3.*;
|
||||||
import okhttp3.RequestBody;
|
|
||||||
import okhttp3.Response;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,12 +29,7 @@ public class HttpUtils {
|
|||||||
.get()
|
.get()
|
||||||
.url(url)
|
.url(url)
|
||||||
.build();
|
.build();
|
||||||
try (Response response = client.newCall(request).execute()) {
|
return execute(request);
|
||||||
if (response.code() == HTTP_SUCCESS_CODE) {
|
|
||||||
return Objects.requireNonNull(response.body()).string();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String post(String url, RequestBody requestBody) throws IOException {
|
public static String post(String url, RequestBody requestBody) throws IOException {
|
||||||
@ -45,12 +37,22 @@ public class HttpUtils {
|
|||||||
.post(requestBody)
|
.post(requestBody)
|
||||||
.url(url)
|
.url(url)
|
||||||
.build();
|
.build();
|
||||||
|
return execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String execute(Request request) throws IOException {
|
||||||
try (Response response = client.newCall(request).execute()) {
|
try (Response response = client.newCall(request).execute()) {
|
||||||
if (response.code() == HTTP_SUCCESS_CODE) {
|
int responseCode = response.code();
|
||||||
return Objects.requireNonNull(response.body()).string();
|
if (responseCode == HTTP_SUCCESS_CODE) {
|
||||||
|
ResponseBody body = response.body();
|
||||||
|
if (body == null) {
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
return body.string();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
throw new PowerJobException(String.format("http request failed,code=%d", responseCode));
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static java.util.Collections.emptyList;
|
import static java.util.Collections.emptyList;
|
||||||
@ -34,6 +35,10 @@ import static java.util.Collections.emptyList;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class NetUtils {
|
public class NetUtils {
|
||||||
|
|
||||||
|
// returned port range is [30000, 39999]
|
||||||
|
private static final int RND_PORT_START = 30000;
|
||||||
|
private static final int RND_PORT_END = 65535;
|
||||||
|
|
||||||
private static volatile String HOST_ADDRESS;
|
private static volatile String HOST_ADDRESS;
|
||||||
private static final String LOCALHOST_VALUE = "127.0.0.1";
|
private static final String LOCALHOST_VALUE = "127.0.0.1";
|
||||||
@ -41,6 +46,10 @@ public class NetUtils {
|
|||||||
private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
|
private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
|
||||||
private static final String ANYHOST_VALUE = "0.0.0.0";
|
private static final String ANYHOST_VALUE = "0.0.0.0";
|
||||||
|
|
||||||
|
public static int getRandomPort() {
|
||||||
|
return ThreadLocalRandom.current().nextInt(RND_PORT_START, RND_PORT_END);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取本机 IP 地址
|
* 获取本机 IP 地址
|
||||||
* @return 本机 IP 地址
|
* @return 本机 IP 地址
|
||||||
|
@ -10,13 +10,13 @@
|
|||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>powerjob-server</artifactId>
|
<artifactId>powerjob-server</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<swagger.version>2.9.2</swagger.version>
|
<swagger.version>2.9.2</swagger.version>
|
||||||
<springboot.version>2.3.4.RELEASE</springboot.version>
|
<springboot.version>2.3.4.RELEASE</springboot.version>
|
||||||
<powerjob.common.version>3.3.2</powerjob.common.version>
|
<powerjob.common.version>3.3.3</powerjob.common.version>
|
||||||
<!-- 数据库驱动版本,使用的是spring-boot-dependencies管理的版本 -->
|
<!-- 数据库驱动版本,使用的是spring-boot-dependencies管理的版本 -->
|
||||||
<mysql.version>8.0.19</mysql.version>
|
<mysql.version>8.0.19</mysql.version>
|
||||||
<ojdbc.version>19.7.0.0</ojdbc.version>
|
<ojdbc.version>19.7.0.0</ojdbc.version>
|
||||||
|
@ -159,7 +159,7 @@ public class HashedWheelTimer implements Timer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDone() {
|
public boolean isDone() {
|
||||||
return startTime == FINISHED;
|
return status == FINISHED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,10 +51,14 @@ public class DingTalkAlarmService implements Alarmable {
|
|||||||
}
|
}
|
||||||
Set<String> userIds = Sets.newHashSet();
|
Set<String> userIds = Sets.newHashSet();
|
||||||
targetUserList.forEach(user -> {
|
targetUserList.forEach(user -> {
|
||||||
|
String phone = user.getPhone();
|
||||||
|
if (StringUtils.isEmpty(phone)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
String userId = mobile2UserIdCache.get(user.getPhone(), () -> {
|
String userId = mobile2UserIdCache.get(phone, () -> {
|
||||||
try {
|
try {
|
||||||
return dingTalkUtils.fetchUserIdByMobile(user.getPhone());
|
return dingTalkUtils.fetchUserIdByMobile(phone);
|
||||||
} catch (PowerJobException ignore) {
|
} catch (PowerJobException ignore) {
|
||||||
return EMPTY_TAG;
|
return EMPTY_TAG;
|
||||||
} catch (Exception ignore) {
|
} catch (Exception ignore) {
|
||||||
|
@ -14,6 +14,7 @@ import org.springframework.util.StringUtils;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 邮件通知服务
|
* 邮件通知服务
|
||||||
@ -43,7 +44,7 @@ public class MailAlarmService implements Alarmable {
|
|||||||
SimpleMailMessage sm = new SimpleMailMessage();
|
SimpleMailMessage sm = new SimpleMailMessage();
|
||||||
try {
|
try {
|
||||||
sm.setFrom(from);
|
sm.setFrom(from);
|
||||||
sm.setTo(targetUserList.stream().map(UserInfoDO::getEmail).toArray(String[]::new));
|
sm.setTo(targetUserList.stream().map(UserInfoDO::getEmail).filter(Objects::nonNull).toArray(String[]::new));
|
||||||
sm.setSubject(alarm.fetchTitle());
|
sm.setSubject(alarm.fetchTitle());
|
||||||
sm.setText(alarm.fetchContent());
|
sm.setText(alarm.fetchContent());
|
||||||
|
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.github.kfcfans.powerjob.server.service.alarm.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.github.kfcfans.powerjob.common.OmsConstant;
|
||||||
|
import com.github.kfcfans.powerjob.common.utils.HttpUtils;
|
||||||
|
import com.github.kfcfans.powerjob.server.persistence.core.model.UserInfoDO;
|
||||||
|
import com.github.kfcfans.powerjob.server.service.alarm.Alarm;
|
||||||
|
import com.github.kfcfans.powerjob.server.service.alarm.Alarmable;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import okhttp3.MediaType;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* http 回调报警
|
||||||
|
*
|
||||||
|
* @author tjq
|
||||||
|
* @since 11/14/20
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class WebHookAlarmService implements Alarmable {
|
||||||
|
|
||||||
|
private static final String HTTP_PROTOCOL_PREFIX = "http://";
|
||||||
|
private static final String HTTPS_PROTOCOL_PREFIX = "https://";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailed(Alarm alarm, List<UserInfoDO> targetUserList) {
|
||||||
|
if (CollectionUtils.isEmpty(targetUserList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
targetUserList.forEach(user -> {
|
||||||
|
String webHook = user.getWebHook();
|
||||||
|
if (StringUtils.isEmpty(webHook)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动添加协议头
|
||||||
|
if (!webHook.startsWith(HTTP_PROTOCOL_PREFIX) && !webHook.startsWith(HTTPS_PROTOCOL_PREFIX)) {
|
||||||
|
webHook = HTTP_PROTOCOL_PREFIX + webHook;
|
||||||
|
}
|
||||||
|
|
||||||
|
MediaType jsonType = MediaType.parse(OmsConstant.JSON_MEDIA_TYPE);
|
||||||
|
RequestBody requestBody = RequestBody.create(jsonType, JSONObject.toJSONString(alarm));
|
||||||
|
|
||||||
|
try {
|
||||||
|
String response = HttpUtils.post(webHook, requestBody);
|
||||||
|
log.info("[WebHookAlarmService] invoke webhook[url={}] successfully, response is {}", webHook, response);
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.warn("[WebHookAlarmService] invoke webhook[url={}] failed!", webHook, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.github.kfcfans.powerjob.server.web.controller;
|
package com.github.kfcfans.powerjob.server.web.controller;
|
||||||
|
|
||||||
|
import com.github.kfcfans.powerjob.common.PowerJobException;
|
||||||
import com.github.kfcfans.powerjob.common.response.ResultDTO;
|
import com.github.kfcfans.powerjob.common.response.ResultDTO;
|
||||||
import com.github.kfcfans.powerjob.server.persistence.core.model.AppInfoDO;
|
import com.github.kfcfans.powerjob.server.persistence.core.model.AppInfoDO;
|
||||||
import com.github.kfcfans.powerjob.server.persistence.core.repository.AppInfoRepository;
|
import com.github.kfcfans.powerjob.server.persistence.core.repository.AppInfoRepository;
|
||||||
@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,6 +52,11 @@ public class AppInfoController {
|
|||||||
appInfoDO.setGmtCreate(new Date());
|
appInfoDO.setGmtCreate(new Date());
|
||||||
}else {
|
}else {
|
||||||
appInfoDO = appInfoRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("can't find appInfo by id:" + id));
|
appInfoDO = appInfoRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("can't find appInfo by id:" + id));
|
||||||
|
|
||||||
|
// 对比密码
|
||||||
|
if (!Objects.equals(req.getOldPassword(), appInfoDO.getPassword())) {
|
||||||
|
throw new PowerJobException("The password is incorrect.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
BeanUtils.copyProperties(req, appInfoDO);
|
BeanUtils.copyProperties(req, appInfoDO);
|
||||||
appInfoDO.setGmtModified(new Date());
|
appInfoDO.setGmtModified(new Date());
|
||||||
|
@ -17,6 +17,7 @@ import com.github.kfcfans.powerjob.server.service.instance.InstanceService;
|
|||||||
import com.github.kfcfans.powerjob.server.web.request.QueryInstanceRequest;
|
import com.github.kfcfans.powerjob.server.web.request.QueryInstanceRequest;
|
||||||
import com.github.kfcfans.powerjob.server.web.response.InstanceDetailVO;
|
import com.github.kfcfans.powerjob.server.web.response.InstanceDetailVO;
|
||||||
import com.github.kfcfans.powerjob.server.web.response.InstanceInfoVO;
|
import com.github.kfcfans.powerjob.server.web.response.InstanceInfoVO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.data.domain.Example;
|
import org.springframework.data.domain.Example;
|
||||||
@ -40,6 +41,7 @@ import java.util.stream.Collectors;
|
|||||||
* @author tjq
|
* @author tjq
|
||||||
* @since 2020/4/9
|
* @since 2020/4/9
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/instance")
|
@RequestMapping("/instance")
|
||||||
public class InstanceController {
|
public class InstanceController {
|
||||||
@ -89,6 +91,7 @@ public class InstanceController {
|
|||||||
response.sendRedirect(url);
|
response.sendRedirect(url);
|
||||||
return ResultDTO.success(StringPage.simple("redirecting..."));
|
return ResultDTO.success(StringPage.simple("redirecting..."));
|
||||||
}catch (Exception e) {
|
}catch (Exception e) {
|
||||||
|
log.warn("[Instance-{}] redirect request to url[{}] failed, please ensure all server has the same http port!", instanceId, url, e);
|
||||||
return ResultDTO.failed(e);
|
return ResultDTO.failed(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
public class ModifyAppInfoRequest {
|
public class ModifyAppInfoRequest {
|
||||||
|
|
||||||
private Long id;
|
private Long id;
|
||||||
|
private String oldPassword;
|
||||||
private String appName;
|
private String appName;
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ public class ModifyUserInfoRequest {
|
|||||||
|
|
||||||
private String username;
|
private String username;
|
||||||
private String password;
|
private String password;
|
||||||
|
private String webHook;
|
||||||
|
|
||||||
// 手机号
|
// 手机号
|
||||||
private String phone;
|
private String phone;
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -12,15 +12,15 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"41f1f4da-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true&":
|
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f7b44cbc-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true&":
|
||||||
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||||||
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"41f1f4da-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true& ***!
|
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f7b44cbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true& ***!
|
||||||
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
||||||
/*! exports provided: render, staticRenderFns */
|
/*! exports provided: render, staticRenderFns */
|
||||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"el-card\",\n { staticClass: \"box-card\" },\n [\n _c(\n \"el-form\",\n {\n ref: \"form\",\n staticClass: \"genTable\",\n attrs: {\n model: _vm.form,\n \"label-width\": \"150px\",\n \"label-position\": \"left\"\n }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: \"Group\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.group,\n callback: function($$v) {\n _vm.$set(_vm.form, \"group\", $$v)\n },\n expression: \"form.group\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Artifact\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.artifact,\n callback: function($$v) {\n _vm.$set(_vm.form, \"artifact\", $$v)\n },\n expression: \"form.artifact\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Name\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.name,\n callback: function($$v) {\n _vm.$set(_vm.form, \"name\", $$v)\n },\n expression: \"form.name\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Package name\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.packageName,\n callback: function($$v) {\n _vm.$set(_vm.form, \"packageName\", $$v)\n },\n expression: \"form.packageName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Java Version\" } },\n [\n _c(\n \"el-radio-group\",\n {\n model: {\n value: _vm.form.javaVersion,\n callback: function($$v) {\n _vm.$set(_vm.form, \"javaVersion\", $$v)\n },\n expression: \"form.javaVersion\"\n }\n },\n [\n _c(\"el-radio\", { attrs: { label: \"8\" } }),\n _c(\"el-radio\", { attrs: { label: \"11\" } })\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n { attrs: { type: \"primary\" }, on: { click: _vm.onSubmit } },\n [_vm._v(\"Generate\")]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/views/ContainerTemplate.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%2241f1f4da-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"el-card\",\n { staticClass: \"box-card\" },\n [\n _c(\n \"el-form\",\n {\n ref: \"form\",\n staticClass: \"genTable\",\n attrs: {\n model: _vm.form,\n \"label-width\": \"150px\",\n \"label-position\": \"left\"\n }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: \"Group\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.group,\n callback: function($$v) {\n _vm.$set(_vm.form, \"group\", $$v)\n },\n expression: \"form.group\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Artifact\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.artifact,\n callback: function($$v) {\n _vm.$set(_vm.form, \"artifact\", $$v)\n },\n expression: \"form.artifact\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Name\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.name,\n callback: function($$v) {\n _vm.$set(_vm.form, \"name\", $$v)\n },\n expression: \"form.name\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Package name\" } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.form.packageName,\n callback: function($$v) {\n _vm.$set(_vm.form, \"packageName\", $$v)\n },\n expression: \"form.packageName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"Java Version\" } },\n [\n _c(\n \"el-radio-group\",\n {\n model: {\n value: _vm.form.javaVersion,\n callback: function($$v) {\n _vm.$set(_vm.form, \"javaVersion\", $$v)\n },\n expression: \"form.javaVersion\"\n }\n },\n [\n _c(\"el-radio\", { attrs: { label: \"8\" } }),\n _c(\"el-radio\", { attrs: { label: \"11\" } })\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n { attrs: { type: \"primary\" }, on: { click: _vm.onSubmit } },\n [_vm._v(\"Generate\")]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/views/ContainerTemplate.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
|
|||||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_41f1f4da_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ContainerTemplate_vue_vue_type_template_id_a291308c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"41f1f4da-vue-loader-template\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"41f1f4da-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_41f1f4da_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ContainerTemplate_vue_vue_type_template_id_a291308c_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_41f1f4da_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ContainerTemplate_vue_vue_type_template_id_a291308c_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/components/views/ContainerTemplate.vue?");
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f7b44cbc_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ContainerTemplate_vue_vue_type_template_id_a291308c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f7b44cbc-vue-loader-template\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"f7b44cbc-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/ContainerTemplate.vue?vue&type=template&id=a291308c&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f7b44cbc_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ContainerTemplate_vue_vue_type_template_id_a291308c_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f7b44cbc_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ContainerTemplate_vue_vue_type_template_id_a291308c_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/components/views/ContainerTemplate.vue?");
|
||||||
|
|
||||||
/***/ })
|
/***/ })
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,6 +1,5 @@
|
|||||||
package com.github.kfcfans.powerjob.server.test;
|
package com.github.kfcfans.powerjob.server.test;
|
||||||
|
|
||||||
import com.github.kfcfans.powerjob.server.OhMyApplication;
|
|
||||||
import com.github.kfcfans.powerjob.server.common.utils.CronExpression;
|
import com.github.kfcfans.powerjob.server.common.utils.CronExpression;
|
||||||
import com.github.kfcfans.powerjob.server.common.utils.timewheel.HashedWheelTimer;
|
import com.github.kfcfans.powerjob.server.common.utils.timewheel.HashedWheelTimer;
|
||||||
import com.github.kfcfans.powerjob.server.common.utils.timewheel.TimerFuture;
|
import com.github.kfcfans.powerjob.server.common.utils.timewheel.TimerFuture;
|
||||||
@ -11,9 +10,11 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工具类测试
|
* 工具类测试
|
||||||
@ -92,4 +93,11 @@ public class UtilsTest {
|
|||||||
System.out.println(StringUtils.containsWhitespace(goodAppName));
|
System.out.println(StringUtils.containsWhitespace(goodAppName));
|
||||||
System.out.println(StringUtils.containsWhitespace(appName));
|
System.out.println(StringUtils.containsWhitespace(appName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filterTest() {
|
||||||
|
List<String> test = Lists.newArrayList("A", "B", null, "C", null);
|
||||||
|
List<String> list = test.stream().filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
System.out.println(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,12 @@
|
|||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>powerjob-worker-agent</artifactId>
|
<artifactId>powerjob-worker-agent</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<powerjob.worker.version>3.3.2</powerjob.worker.version>
|
<powerjob.worker.version>3.3.3</powerjob.worker.version>
|
||||||
<logback.version>1.2.3</logback.version>
|
<logback.version>1.2.3</logback.version>
|
||||||
<picocli.version>4.3.2</picocli.version>
|
<picocli.version>4.3.2</picocli.version>
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>powerjob-worker-samples</artifactId>
|
<artifactId>powerjob-worker-samples</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<springboot.version>2.2.6.RELEASE</springboot.version>
|
<springboot.version>2.2.6.RELEASE</springboot.version>
|
||||||
<powerjob.worker.starter.version>3.3.2</powerjob.worker.starter.version>
|
<powerjob.worker.starter.version>3.3.3</powerjob.worker.starter.version>
|
||||||
<fastjson.version>1.2.68</fastjson.version>
|
<fastjson.version>1.2.68</fastjson.version>
|
||||||
|
|
||||||
<!-- 部署时跳过该module -->
|
<!-- 部署时跳过该module -->
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
|
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<powerjob.worker.version>3.3.2</powerjob.worker.version>
|
<powerjob.worker.version>3.3.3</powerjob.worker.version>
|
||||||
<springboot.version>2.2.6.RELEASE</springboot.version>
|
<springboot.version>2.2.6.RELEASE</springboot.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -10,12 +10,12 @@
|
|||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>powerjob-worker</artifactId>
|
<artifactId>powerjob-worker</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.3.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<spring.version>5.2.4.RELEASE</spring.version>
|
<spring.version>5.2.4.RELEASE</spring.version>
|
||||||
<powerjob.common.version>3.3.2</powerjob.common.version>
|
<powerjob.common.version>3.3.3</powerjob.common.version>
|
||||||
<h2.db.version>1.4.200</h2.db.version>
|
<h2.db.version>1.4.200</h2.db.version>
|
||||||
<hikaricp.version>3.4.2</hikaricp.version>
|
<hikaricp.version>3.4.2</hikaricp.version>
|
||||||
<junit.version>5.6.1</junit.version>
|
<junit.version>5.6.1</junit.version>
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package com.github.kfcfans.powerjob.worker.common;
|
package com.github.kfcfans.powerjob.worker.common;
|
||||||
|
|
||||||
import com.github.kfcfans.powerjob.common.RemoteConstant;
|
import com.github.kfcfans.powerjob.common.RemoteConstant;
|
||||||
|
import com.github.kfcfans.powerjob.common.utils.NetUtils;
|
||||||
import com.github.kfcfans.powerjob.worker.common.constants.StoreStrategy;
|
import com.github.kfcfans.powerjob.worker.common.constants.StoreStrategy;
|
||||||
import com.github.kfcfans.powerjob.worker.core.processor.ProcessResult;
|
import com.github.kfcfans.powerjob.worker.core.processor.ProcessResult;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import lombok.Data;
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,7 +15,7 @@ import java.util.List;
|
|||||||
* @author tjq
|
* @author tjq
|
||||||
* @since 2020/3/16
|
* @since 2020/3/16
|
||||||
*/
|
*/
|
||||||
@Data
|
@Setter
|
||||||
public class OhMyConfig {
|
public class OhMyConfig {
|
||||||
/**
|
/**
|
||||||
* 应用名称
|
* 应用名称
|
||||||
@ -48,4 +48,35 @@ public class OhMyConfig {
|
|||||||
* true -> 用于本地写单元测试调试; false -> 默认值,标准模式
|
* true -> 用于本地写单元测试调试; false -> 默认值,标准模式
|
||||||
*/
|
*/
|
||||||
private boolean enableTestMode = false;
|
private boolean enableTestMode = false;
|
||||||
|
|
||||||
|
public String getAppName() {
|
||||||
|
return appName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPort() {
|
||||||
|
if (port > 0) {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
return NetUtils.getRandomPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getServerAddress() {
|
||||||
|
return serverAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreStrategy getStoreStrategy() {
|
||||||
|
return storeStrategy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxResultLength() {
|
||||||
|
return maxResultLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getUserContext() {
|
||||||
|
return userContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnableTestMode() {
|
||||||
|
return enableTestMode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user