refactor(xxl-job): 重构 ReturnT 类并更新相关代码- 重构 ReturnT 类,添加 isSuccess() 方法和静态工厂方法- 更新文档,明确任务执行结果的判断条件

- 修改多个控制器和业务逻辑类,使用新的 ReturnT 静态方法
- 调整测试用例,使用 isSuccess() 方法进行断言- 移除 pom.xml 中的冗余依赖
3.2.0-release
xuxueli 4 weeks ago
parent b54ca22e9e
commit 3a97151cae

@ -1625,7 +1625,7 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件需要通过
### 5.8 任务执行结果
自v1.6.2之后,任务执行结果通过 "IJobHandler" 的返回值 "ReturnT" 进行判断;
当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度中心;
当返回值符合 "ReturnT#code == 200" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT#msg" 回调错误信息给调度中心;
从而,在任务逻辑中可以方便的控制任务执行结果;
### 5.9 分片广播 & 动态分片
@ -2376,7 +2376,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
@XxlJob("demoJobHandler")
public ReturnT<String> execute(String param) {
XxlJobLogger.log("hello world");
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
```
- 2、移除commons-exec采用原生方式实现降低第三方依赖

@ -44,13 +44,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- mail-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>

@ -99,7 +99,7 @@ public class JobCodeController {
// remove code backup more than 30
xxlJobLogGlueDao.removeOld(existsJobInfo.getId(), 30);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
}

@ -102,7 +102,7 @@ public class JobGroupController {
xxlJobGroup.setUpdateTime(new Date());
int ret = xxlJobGroupDao.save(xxlJobGroup);
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
return (ret>0)?ReturnT.ofSuccess():ReturnT.ofFail();
}
@RequestMapping("/update")
@ -149,7 +149,7 @@ public class JobGroupController {
xxlJobGroup.setUpdateTime(new Date());
int ret = xxlJobGroupDao.update(xxlJobGroup);
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
return (ret>0)?ReturnT.ofSuccess():ReturnT.ofFail();
}
private List<String> findRegistryByAppName(String appnameParam){
@ -191,7 +191,7 @@ public class JobGroupController {
}
int ret = xxlJobGroupDao.remove(id);
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
return (ret>0)?ReturnT.ofSuccess():ReturnT.ofFail();
}
@RequestMapping("/loadById")

@ -284,7 +284,7 @@ public class JobLogController {
}
} while (logIds!=null && logIds.size()>0);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
}

@ -104,7 +104,7 @@ public class JobUserController {
// write
xxlJobUserDao.save(xxlJobUser);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@RequestMapping("/update")
@ -115,7 +115,7 @@ public class JobUserController {
// avoid opt login seft
XxlJobUser loginUser = PermissionInterceptor.getLoginUser(request);
if (loginUser.getUsername().equals(xxlJobUser.getUsername())) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("user_update_loginuser_limit"));
return ReturnT.ofFail(I18nUtil.getString("user_update_loginuser_limit"));
}
// valid password
@ -132,7 +132,7 @@ public class JobUserController {
// write
xxlJobUserDao.update(xxlJobUser);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@RequestMapping("/remove")
@ -143,11 +143,11 @@ public class JobUserController {
// avoid opt login seft
XxlJobUser loginUser = PermissionInterceptor.getLoginUser(request);
if (loginUser.getId() == id) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("user_update_loginuser_limit"));
return ReturnT.ofFail(I18nUtil.getString("user_update_loginuser_limit"));
}
xxlJobUserDao.delete(id);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@RequestMapping("/updatePwd")
@ -157,15 +157,15 @@ public class JobUserController {
@RequestParam("oldPassword") String oldPassword){
// valid
if (oldPassword==null || oldPassword.trim().length()==0){
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("system_please_input") + I18nUtil.getString("change_pwd_field_oldpwd"));
if (oldPassword==null || oldPassword.trim().isEmpty()){
return ReturnT.ofFail(I18nUtil.getString("system_please_input") + I18nUtil.getString("change_pwd_field_oldpwd"));
}
if (password==null || password.trim().length()==0){
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("system_please_input") + I18nUtil.getString("change_pwd_field_oldpwd"));
if (password==null || password.trim().isEmpty()){
return ReturnT.ofFail(I18nUtil.getString("system_please_input") + I18nUtil.getString("change_pwd_field_oldpwd"));
}
password = password.trim();
if (!(password.length()>=4 && password.length()<=20)) {
return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
return ReturnT.ofFail(I18nUtil.getString("system_lengh_limit")+"[4-20]" );
}
// md5 password
@ -176,14 +176,14 @@ public class JobUserController {
XxlJobUser loginUser = PermissionInterceptor.getLoginUser(request);
XxlJobUser existUser = xxlJobUserDao.loadByUserName(loginUser.getUsername());
if (!md5OldPassword.equals(existUser.getPassword())) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("change_pwd_field_oldpwd") + I18nUtil.getString("system_unvalid"));
return ReturnT.ofFail(I18nUtil.getString("change_pwd_field_oldpwd") + I18nUtil.getString("system_unvalid"));
}
// write new
existUser.setPassword(md5Password);
xxlJobUserDao.update(existUser);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
}

@ -37,7 +37,7 @@ public class EmailJobAlarm implements JobAlarm {
boolean alarmResult = true;
// send monitor email
if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
if (info!=null && info.getAlarmEmail()!=null && !info.getAlarmEmail().trim().isEmpty()) {
// alarmContent
String alarmContent = "Alarm Job LogId=" + jobLog.getId();

@ -64,14 +64,14 @@ public class XxlJobCompleter {
// trigger child job
JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, -1, null, null, null);
ReturnT<String> triggerChildResult = ReturnT.SUCCESS;
ReturnT<String> triggerChildResult = ReturnT.ofSuccess();
// add msg
triggerChildMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg1"),
(i+1),
childJobIds.length,
childJobIds[i],
(triggerChildResult.getCode()==ReturnT.SUCCESS_CODE?I18nUtil.getString("system_success"):I18nUtil.getString("system_fail")),
(triggerChildResult.isSuccess()?I18nUtil.getString("system_success"):I18nUtil.getString("system_fail")),
triggerChildResult.getMsg());
} else {
triggerChildMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg2"),

@ -35,7 +35,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
.append("<br>msg").append(idleBeatResult.getMsg());
// beat success
if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
if (idleBeatResult.isSuccess()) {
idleBeatResult.setMsg(idleBeatResultSB.toString());
idleBeatResult.setContent(address);
return idleBeatResult;

@ -35,7 +35,7 @@ public class ExecutorRouteFailover extends ExecutorRouter {
.append("<br>msg").append(beatResult.getMsg());
// beat success
if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
if (beatResult.isSuccess()) {
beatResult.setMsg(beatResultSB.toString());
beatResult.setContent(address);

@ -143,12 +143,12 @@ public class JobCompleteHelper {
for (HandleCallbackParam handleCallbackParam: callbackParamList) {
ReturnT<String> callbackResult = callback(handleCallbackParam);
logger.debug(">>>>>>>>> JobApiController.callback {}, handleCallbackParam={}, callbackResult={}",
(callbackResult.getCode()== ReturnT.SUCCESS_CODE?"success":"fail"), handleCallbackParam, callbackResult);
(callbackResult.isSuccess()?"success":"fail"), handleCallbackParam, callbackResult);
}
}
});
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
private ReturnT<String> callback(HandleCallbackParam handleCallbackParam) {
@ -176,7 +176,7 @@ public class JobCompleteHelper {
log.setHandleMsg(handleMsg.toString());
XxlJobCompleter.updateHandleInfoAndFinish(log);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}

@ -175,7 +175,7 @@ public class JobRegistryHelper {
}
});
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
public ReturnT<String> registryRemove(RegistryParam registryParam) {
@ -199,7 +199,7 @@ public class JobRegistryHelper {
}
});
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
private void freshGroupRegistryInfo(RegistryParam registryParam){

@ -150,7 +150,7 @@ public class XxlJobTrigger {
}
} else {
routeAddressResult = executorRouteStrategyEnum.getRouter().route(triggerParam, group.getRegistryList());
if (routeAddressResult.getCode() == ReturnT.SUCCESS_CODE) {
if (routeAddressResult.isSuccess()) {
address = routeAddressResult.getContent();
}
}

@ -66,7 +66,7 @@ public class LoginService {
// do login
CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
/**
@ -77,7 +77,7 @@ public class LoginService {
*/
public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){
CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
/**

@ -305,20 +305,20 @@ public class XxlJobServiceImpl implements XxlJobService {
xxlJobInfoDao.update(exists_jobInfo);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@Override
public ReturnT<String> remove(int id) {
XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
if (xxlJobInfo == null) {
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
xxlJobInfoDao.delete(id);
xxlJobLogDao.delete(id);
xxlJobLogGlueDao.deleteByJobId(id);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@Override
@ -326,13 +326,13 @@ public class XxlJobServiceImpl implements XxlJobService {
// load and valid
XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
if (xxlJobInfo == null) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
return ReturnT.ofFail(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
}
// valid
ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(xxlJobInfo.getScheduleType(), ScheduleTypeEnum.NONE);
if (ScheduleTypeEnum.NONE == scheduleTypeEnum) {
return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type_none_limit_start")) );
return ReturnT.ofFail(I18nUtil.getString("schedule_type_none_limit_start"));
}
// next trigger time (5s后生效避开预读周期)
@ -354,7 +354,7 @@ public class XxlJobServiceImpl implements XxlJobService {
xxlJobInfo.setUpdateTime(new Date());
xxlJobInfoDao.update(xxlJobInfo);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@Override
@ -362,7 +362,7 @@ public class XxlJobServiceImpl implements XxlJobService {
// load and valid
XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
if (xxlJobInfo == null) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
return ReturnT.ofFail(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
}
// stop
@ -372,7 +372,7 @@ public class XxlJobServiceImpl implements XxlJobService {
xxlJobInfo.setUpdateTime(new Date());
xxlJobInfoDao.update(xxlJobInfo);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@ -381,14 +381,14 @@ public class XxlJobServiceImpl implements XxlJobService {
public ReturnT<String> trigger(XxlJobUser loginUser, int jobId, String executorParam, String addressList) {
// permission
if (loginUser == null) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("system_permission_limit"));
return ReturnT.ofFail(I18nUtil.getString("system_permission_limit"));
}
XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(jobId);
if (xxlJobInfo == null) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
return ReturnT.ofFail(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
}
if (!hasPermission(loginUser, xxlJobInfo.getJobGroup())) {
return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("system_permission_limit"));
return ReturnT.ofFail(I18nUtil.getString("system_permission_limit"));
}
// force cover job param
@ -397,7 +397,7 @@ public class XxlJobServiceImpl implements XxlJobService {
}
JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.MANUAL, -1, null, executorParam, addressList);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
private boolean hasPermission(XxlJobUser loginUser, int jobGroup){

@ -3,7 +3,7 @@ server.port=8080
server.servlet.context-path=/xxl-job-admin
### actuator
management.server.base-path=/actuator
management.endpoints.web.base-path=/actuator
management.health.mail.enabled=false
### resources

@ -39,7 +39,7 @@ public class AdminBizTest {
ReturnT<String> returnT = adminBiz.callback(callbackParamList);
assertTrue(returnT.getCode() == ReturnT.SUCCESS_CODE);
assertTrue(returnT.isSuccess());
}
/**
@ -54,7 +54,7 @@ public class AdminBizTest {
RegistryParam registryParam = new RegistryParam(RegistryConfig.RegistType.EXECUTOR.name(), "xxl-job-executor-example", "127.0.0.1:9999");
ReturnT<String> returnT = adminBiz.registry(registryParam);
assertTrue(returnT.getCode() == ReturnT.SUCCESS_CODE);
assertTrue(returnT.isSuccess());
}
/**
@ -69,7 +69,7 @@ public class AdminBizTest {
RegistryParam registryParam = new RegistryParam(RegistryConfig.RegistType.EXECUTOR.name(), "xxl-job-executor-example", "127.0.0.1:9999");
ReturnT<String> returnT = adminBiz.registryRemove(registryParam);
assertTrue(returnT.getCode() == ReturnT.SUCCESS_CODE);
assertTrue(returnT.isSuccess());
}

@ -24,7 +24,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
@Override
public ReturnT<String> beat() {
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@Override
@ -40,7 +40,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
if (isRunningOrHasQueue) {
return new ReturnT<String>(ReturnT.FAIL_CODE, "job thread is running or has trigger queue.");
}
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
@Override
@ -154,10 +154,10 @@ public class ExecutorBizImpl implements ExecutorBiz {
JobThread jobThread = XxlJobExecutor.loadJobThread(killParam.getJobId());
if (jobThread != null) {
XxlJobExecutor.removeJobThread(killParam.getJobId(), "scheduling center kill job.");
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
return new ReturnT<String>(ReturnT.SUCCESS_CODE, "job thread already killed.");
return ReturnT.ofSuccess( "job thread already killed.");
}
@Override

@ -4,27 +4,32 @@ import java.io.Serializable;
/**
* common return
*
* @author xuxueli 2015-12-4 16:32:31
* @param <T>
*/
public class ReturnT<T> implements Serializable {
public static final long serialVersionUID = 42L;
public static final int SUCCESS_CODE = 200;
public static final int FAIL_CODE = 500;
public static final ReturnT<String> SUCCESS = new ReturnT<String>(null);
public static final ReturnT<String> FAIL = new ReturnT<String>(FAIL_CODE, null);
private int code;
private String msg;
private T content;
public ReturnT(){}
public ReturnT(int code, String msg) {
this.code = code;
this.msg = msg;
}
public ReturnT(int code, String msg, T content) {
this.code = code;
this.msg = msg;
this.content = content;
}
public ReturnT(T content) {
this.code = SUCCESS_CODE;
this.content = content;
@ -33,25 +38,71 @@ public class ReturnT<T> implements Serializable {
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
@Override
public String toString() {
return "ReturnT [code=" + code + ", msg=" + msg + ", content=" + content + "]";
return "ReturnT{" +
"code=" + code +
", msg='" + msg + '\'' +
", content=" + content +
'}';
}
// --------------------------- tool ---------------------------
public static final int SUCCESS_CODE = 200;
public static final int FAIL_CODE = 500;
/**
* is success
*
* @return
*/
public boolean isSuccess() {
return code == SUCCESS_CODE;
}
public static <T> ReturnT<T> of(int code, String msg, T data) {
return new ReturnT<T>(code, msg, data);
}
public static <T> ReturnT<T> of(int code, String msg) {
return new ReturnT<T>(code, msg, null);
}
public static <T> ReturnT<T> ofSuccess(T data) {
return new ReturnT<T>(SUCCESS_CODE, "Success", data);
}
public static <T> ReturnT<T> ofSuccess() {
return new ReturnT<T>(SUCCESS_CODE, "Success", null);
}
public static <T> ReturnT<T> ofFail(String msg) {
return new ReturnT<T>(FAIL_CODE, msg, null);
}
public static <T> ReturnT<T> ofFail() {
return new ReturnT<T>(FAIL_CODE, "Fail", null);
}
}

@ -46,8 +46,8 @@ public class ExecutorRegistryThread {
for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
try {
ReturnT<String> registryResult = adminBiz.registry(registryParam);
if (registryResult!=null && ReturnT.SUCCESS_CODE == registryResult.getCode()) {
registryResult = ReturnT.SUCCESS;
if (registryResult!=null && registryResult.isSuccess()) {
registryResult = ReturnT.ofSuccess();
logger.debug(">>>>>>>>>>> xxl-job registry success, registryParam:{}, registryResult:{}", new Object[]{registryParam, registryResult});
break;
} else {
@ -82,8 +82,8 @@ public class ExecutorRegistryThread {
for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
try {
ReturnT<String> registryResult = adminBiz.registryRemove(registryParam);
if (registryResult!=null && ReturnT.SUCCESS_CODE == registryResult.getCode()) {
registryResult = ReturnT.SUCCESS;
if (registryResult!=null && registryResult.isSuccess()) {
registryResult = ReturnT.ofSuccess();
logger.info(">>>>>>>>>>> xxl-job registry-remove success, registryParam:{}, registryResult:{}", new Object[]{registryParam, registryResult});
break;
} else {

@ -67,7 +67,7 @@ public class JobThread extends Thread{
triggerLogIdSet.add(triggerParam.getLogId());
triggerQueue.add(triggerParam);
return ReturnT.SUCCESS;
return ReturnT.ofSuccess();
}
/**

@ -166,7 +166,7 @@ public class TriggerCallbackThread {
for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
try {
ReturnT<String> callbackResult = adminBiz.callback(callbackParamList);
if (callbackResult!=null && ReturnT.SUCCESS_CODE == callbackResult.getCode()) {
if (callbackResult!=null && callbackResult.isSuccess()) {
callbackLog(callbackParamList, "<br>----------- xxl-job job callback finish.");
callbackRet = true;
break;

Loading…
Cancel
Save