若依(Springboot+Vue)框架下 写一个工具类,判断被调用方法的调用方式是普通方式还是定时任务的方式
时间: 2024-04-09 17:33:19 浏览: 81
在Spring Boot和Vue框架下编写一个工具类,用于判断被调用方法的调用方式是普通方式还是定时任务的方式。可以通过检查方法的注解来判断方法是否被定时任务调用。
首先,确保你的项目中已经引入了Spring的定时任务相关依赖,例如spring-boot-starter-quartz或spring-boot-starter-tasks。
然后,你可以编写一个工具类,使用反射来获取方法的注解信息。以下是一个示例代码:
```java
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
@Component
public class InvocationTypeUtils {
public static boolean isScheduledInvocation() {
// 获取当前方法的调用堆栈
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
// 遍历调用堆栈,找到调用该方法的方法名
String callerMethodName = null;
for (StackTraceElement element : stackTraceElements) {
if (element.getClassName().equals(InvocationTypeUtils.class.getName())) {
continue; // 跳过InvocationTypeUtils类的方法调用
}
callerMethodName = element.getMethodName();
break;
}
// 判断调用该方法的方法是否被@Scheduled注解修饰
if (callerMethodName != null) {
try {
Class<?> callerClass = Class.forName(stackTraceElements[1].getClassName());
Method callerMethod = callerClass.getMethod(callerMethodName);
if (callerMethod.isAnnotationPresent(Scheduled.class)) {
return true; // 被@Scheduled注解修饰,表示是定时任务调用
}
} catch (ClassNotFoundException | NoSuchMethodException e) {
e.printStackTrace();
}
}
return false; // 非定时任务调用
}
}
```
在这个示例中,我们使用了Spring的Scheduled注解来标记定时任务方法。通过获取调用堆栈信息,可以找到调用该方法的方法名,并通过反射判断该方法是否被@Scheduled注解修饰。
你可以在需要判断调用方式的方法中调用`InvocationTypeUtils.isScheduledInvocation()`方法来获取调用方式,如果返回true,则表示被定时任务调用;如果返回false,则表示普通方式调用。
需要注意的是,该方法只能判断直接调用该方法的方法是否为定时任务调用,无法判断更高层次的调用情况。
阅读全文