feat: 3.1.0
1. 新增任务节点手动停止、重试接口
This commit is contained in:
parent
5e27915052
commit
83af125978
@ -1,7 +1,5 @@
|
||||
package com.aizuda.easy.retry.common.log.lang;
|
||||
|
||||
import cn.hutool.core.lang.caller.CallerUtil;
|
||||
|
||||
/**
|
||||
* 调用者接口<br>
|
||||
* 可以通过此接口的实现类方法获取调用者、多级调用者以及判断是否被调用
|
||||
@ -10,12 +8,6 @@ import cn.hutool.core.lang.caller.CallerUtil;
|
||||
*
|
||||
*/
|
||||
public interface Caller {
|
||||
/**
|
||||
* 获得调用者
|
||||
*
|
||||
* @return 调用者
|
||||
*/
|
||||
Class<?> getCaller();
|
||||
|
||||
/**
|
||||
* 获得调用者的调用者
|
||||
@ -24,26 +16,4 @@ public interface Caller {
|
||||
*/
|
||||
Class<?> getCallerCaller();
|
||||
|
||||
/**
|
||||
* 获得调用者,指定第几级调用者 调用者层级关系:
|
||||
*
|
||||
* <pre>
|
||||
* 0 {@link cn.hutool.core.lang.caller.CallerUtil}
|
||||
* 1 调用{@link cn.hutool.core.lang.caller.CallerUtil}中方法的类
|
||||
* 2 调用者的调用者
|
||||
* ...
|
||||
* </pre>
|
||||
*
|
||||
* @param depth 层级。0表示{@link cn.hutool.core.lang.caller.CallerUtil}本身,1表示调用{@link CallerUtil}的类,2表示调用者的调用者,依次类推
|
||||
* @return 第几级调用者
|
||||
*/
|
||||
Class<?> getCaller(int depth);
|
||||
|
||||
/**
|
||||
* 是否被指定类调用
|
||||
*
|
||||
* @param clazz 调用者类
|
||||
* @return 是否被调用
|
||||
*/
|
||||
boolean isCalledBy(Class<?> clazz);
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.aizuda.easy.retry.common.log.lang;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 调用者。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用
|
||||
*
|
||||
@ -12,15 +14,6 @@ public class LogCaller {
|
||||
INSTANCE = tryCreateCaller();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得调用者
|
||||
*
|
||||
* @return 调用者
|
||||
*/
|
||||
public static Class<?> getCaller() {
|
||||
return INSTANCE.getCaller();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得调用者的调用者
|
||||
*
|
||||
@ -30,51 +23,6 @@ public class LogCaller {
|
||||
return INSTANCE.getCallerCaller();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得调用者,指定第几级调用者<br>
|
||||
* 调用者层级关系:
|
||||
*
|
||||
* <pre>
|
||||
* 0 CallerUtil
|
||||
* 1 调用CallerUtil中方法的类
|
||||
* 2 调用者的调用者
|
||||
* ...
|
||||
* </pre>
|
||||
*
|
||||
* @param depth 层级。0表示CallerUtil本身,1表示调用CallerUtil的类,2表示调用者的调用者,依次类推
|
||||
* @return 第几级调用者
|
||||
*/
|
||||
public static Class<?> getCaller(int depth) {
|
||||
return INSTANCE.getCaller(depth);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否被指定类调用
|
||||
*
|
||||
* @param clazz 调用者类
|
||||
* @return 是否被调用
|
||||
*/
|
||||
public static boolean isCalledBy(Class<?> clazz) {
|
||||
return INSTANCE.isCalledBy(clazz);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取调用此方法的方法名
|
||||
*
|
||||
* @param isFullName 是否返回全名,全名包括方法所在类的全路径名
|
||||
* @return 调用此方法的方法名
|
||||
* @since 5.2.4
|
||||
*/
|
||||
public static String getCallerMethodName(boolean isFullName) {
|
||||
final StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2];
|
||||
final String methodName = stackTraceElement.getMethodName();
|
||||
if (false == isFullName) {
|
||||
return methodName;
|
||||
}
|
||||
|
||||
return stackTraceElement.getClassName() + "." + methodName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试创建{@link Caller}实现
|
||||
*
|
||||
@ -84,7 +32,7 @@ public class LogCaller {
|
||||
Caller caller;
|
||||
try {
|
||||
caller = new StackWalkerCaller();
|
||||
if (null != caller.getCaller() && null != caller.getCallerCaller()) {
|
||||
if (Objects.nonNull(caller.getCallerCaller())) {
|
||||
return caller;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
@ -94,5 +42,4 @@ public class LogCaller {
|
||||
caller = new StackTraceCaller();
|
||||
return caller;
|
||||
}
|
||||
// ---------------------------------------------------------------------------------------------- static interface and class
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.aizuda.easy.retry.common.log.lang;
|
||||
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
@ -10,23 +11,10 @@ import java.io.Serializable;
|
||||
* @author wodeyangzipingpingwuqi
|
||||
*/
|
||||
public class StackTraceCaller implements Caller, Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final int OFFSET = 2;
|
||||
|
||||
@Override
|
||||
public Class<?> getCaller() {
|
||||
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
if (OFFSET + 1 >= stackTrace.length) {
|
||||
return null;
|
||||
}
|
||||
final String className = stackTrace[OFFSET + 1].getClassName();
|
||||
try {
|
||||
return Class.forName(className);
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new UtilException(e, "[{}] not found!", className);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCallerCaller() {
|
||||
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
@ -41,28 +29,4 @@ public class StackTraceCaller implements Caller, Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCaller(int depth) {
|
||||
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
if (OFFSET + depth >= stackTrace.length) {
|
||||
return null;
|
||||
}
|
||||
final String className = stackTrace[OFFSET + depth].getClassName();
|
||||
try {
|
||||
return Class.forName(className);
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new UtilException(e, "[{}] not found!", className);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCalledBy(Class<?> clazz) {
|
||||
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
for (final StackTraceElement element : stackTrace) {
|
||||
if (element.getClassName().equals(clazz.getName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.aizuda.easy.retry.common.log.lang;
|
||||
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Stream;
|
||||
@ -12,27 +13,17 @@ import java.util.stream.Stream;
|
||||
* @since 2.6.0
|
||||
*/
|
||||
public class StackWalkerCaller implements Caller, Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Class<?> getCaller() {
|
||||
StackWalker instance = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
|
||||
StackWalker.StackFrame walk = (StackWalker.StackFrame) instance
|
||||
.walk((Function<Stream<StackWalker.StackFrame>, Object>) stackFrameStream ->
|
||||
stackFrameStream.skip(2).findFirst().get());
|
||||
try {
|
||||
return Class.forName(walk.getClassName());
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new UtilException(e, "[{}] not found!", walk.getClassName());
|
||||
}
|
||||
}
|
||||
|
||||
private static final int OFFSET = 2;
|
||||
@Override
|
||||
public Class<?> getCallerCaller() {
|
||||
|
||||
StackWalker instance = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
|
||||
StackWalker.StackFrame walk = (StackWalker.StackFrame) instance
|
||||
.walk((Function<Stream<StackWalker.StackFrame>, Object>) stackFrameStream ->
|
||||
stackFrameStream.skip(3).findFirst().get());
|
||||
stackFrameStream.skip(OFFSET + 1).findFirst().get());
|
||||
try {
|
||||
return Class.forName(walk.getClassName());
|
||||
} catch (ClassNotFoundException e) {
|
||||
@ -40,13 +31,4 @@ public class StackWalkerCaller implements Caller, Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCaller(int depth) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCalledBy(Class<?> clazz) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package com.aizuda.easy.retry.server.web.controller;
|
||||
|
||||
import com.aizuda.easy.retry.server.web.service.WorkflowNodeService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author xiaowoniu
|
||||
* @date 2023-12-23 17:47:51
|
||||
* @since 2.6.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/workflow/node")
|
||||
@RequiredArgsConstructor
|
||||
public class WorkflowNodeController {
|
||||
private final WorkflowNodeService workflowNodeService;
|
||||
|
||||
@PostMapping("/stop/{id}")
|
||||
public Boolean stop(@PathVariable("id") Long id) {
|
||||
return workflowNodeService.stop(id);
|
||||
}
|
||||
|
||||
@PostMapping("/retry/{id}")
|
||||
public Boolean retry(@PathVariable("id") Long id) {
|
||||
return workflowNodeService.retry(id);
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.aizuda.easy.retry.server.web.service;
|
||||
|
||||
/**
|
||||
* @author xiaowoniu
|
||||
* @date 2024-02-03 21:24:52
|
||||
* @since 2.6.0
|
||||
*/
|
||||
public interface WorkflowNodeService {
|
||||
Boolean stop(Long id);
|
||||
|
||||
Boolean retry(Long id);
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.aizuda.easy.retry.server.web.service.impl;
|
||||
|
||||
import com.aizuda.easy.retry.server.web.service.WorkflowNodeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author xiaowoniu
|
||||
* @date 2024-02-03 21:25:00
|
||||
* @since 2.6.0
|
||||
*/
|
||||
@Service
|
||||
public class WorkflowNodeServiceImpl implements WorkflowNodeService {
|
||||
@Override
|
||||
public Boolean stop(Long id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean retry(Long id) {
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user