|
@@ -2,6 +2,8 @@ package com.ruoyi.quartz.util;
|
|
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
import java.lang.reflect.Method;
|
|
|
+import java.util.LinkedList;
|
|
|
+import java.util.List;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
|
|
import com.ruoyi.quartz.domain.SysJob;
|
|
@@ -20,11 +22,21 @@ public class JobInvokeUtil
|
|
|
*/
|
|
|
public static void invokeMethod(SysJob sysJob) throws Exception
|
|
|
{
|
|
|
- Object bean = SpringUtils.getBean(sysJob.getJobName());
|
|
|
- String methodName = sysJob.getMethodName();
|
|
|
- String methodParams = sysJob.getMethodParams();
|
|
|
+ String invokeTarget = sysJob.getInvokeTarget();
|
|
|
+ String beanName = getBeanName(invokeTarget);
|
|
|
+ String methodName = getMethodName(invokeTarget);
|
|
|
+ List<Object[]> methodParams = getMethodParams(invokeTarget);
|
|
|
|
|
|
- invokeSpringBean(bean, methodName, methodParams);
|
|
|
+ if (!isValidClassName(beanName))
|
|
|
+ {
|
|
|
+ Object bean = SpringUtils.getBean(beanName);
|
|
|
+ invokeMethod(bean, methodName, methodParams);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Object bean = Class.forName(beanName).newInstance();
|
|
|
+ invokeMethod(bean, methodName, methodParams);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -34,14 +46,14 @@ public class JobInvokeUtil
|
|
|
* @param methodName 方法名称
|
|
|
* @param methodParams 方法参数
|
|
|
*/
|
|
|
- private static void invokeSpringBean(Object bean, String methodName, String methodParams)
|
|
|
+ private static void invokeMethod(Object bean, String methodName, List<Object[]> methodParams)
|
|
|
throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
|
|
|
InvocationTargetException
|
|
|
{
|
|
|
- if (StringUtils.isNotEmpty(methodParams))
|
|
|
+ if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0)
|
|
|
{
|
|
|
- Method method = bean.getClass().getDeclaredMethod(methodName, String.class);
|
|
|
- method.invoke(bean, methodParams);
|
|
|
+ Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams));
|
|
|
+ method.invoke(bean, getMethodParamsValue(methodParams));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -49,4 +61,122 @@ public class JobInvokeUtil
|
|
|
method.invoke(bean);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验是否为为class包名
|
|
|
+ *
|
|
|
+ * @param str 名称
|
|
|
+ * @return true是 false否
|
|
|
+ */
|
|
|
+ public static boolean isValidClassName(String invokeTarget)
|
|
|
+ {
|
|
|
+ return StringUtils.countMatches(invokeTarget, ".") > 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取bean名称
|
|
|
+ *
|
|
|
+ * @param invokeTarget 目标字符串
|
|
|
+ * @return bean名称
|
|
|
+ */
|
|
|
+ public static String getBeanName(String invokeTarget)
|
|
|
+ {
|
|
|
+ String beanName = StringUtils.substringBefore(invokeTarget, "(");
|
|
|
+ return StringUtils.substringBeforeLast(beanName, ".");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取bean方法
|
|
|
+ *
|
|
|
+ * @param invokeTarget 目标字符串
|
|
|
+ * @return method方法
|
|
|
+ */
|
|
|
+ public static String getMethodName(String invokeTarget)
|
|
|
+ {
|
|
|
+ String methodName = StringUtils.substringBefore(invokeTarget, "(");
|
|
|
+ return StringUtils.substringAfterLast(methodName, ".");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取method方法参数相关列表
|
|
|
+ *
|
|
|
+ * @param invokeTarget 目标字符串
|
|
|
+ * @return method方法相关参数列表
|
|
|
+ */
|
|
|
+ public static List<Object[]> getMethodParams(String invokeTarget)
|
|
|
+ {
|
|
|
+ String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")");
|
|
|
+ if (StringUtils.isEmpty(methodStr))
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String[] methodParams = methodStr.split(",");
|
|
|
+ List<Object[]> classs = new LinkedList<>();
|
|
|
+ for (int i = 0; i < methodParams.length; i++)
|
|
|
+ {
|
|
|
+ String str = StringUtils.trimToEmpty(methodParams[i]);
|
|
|
+ // String字符串类型,包含'
|
|
|
+ if (StringUtils.contains(str, "'"))
|
|
|
+ {
|
|
|
+ classs.add(new Object[] { StringUtils.replace(str, "'", ""), String.class });
|
|
|
+ }
|
|
|
+ // boolean布尔类型,等于true或者false
|
|
|
+ else if (StringUtils.equals(str, "true") || StringUtils.equalsIgnoreCase(str, "false"))
|
|
|
+ {
|
|
|
+ classs.add(new Object[] { Boolean.valueOf(str), Boolean.class });
|
|
|
+ }
|
|
|
+ // long长整形,包含L
|
|
|
+ else if (StringUtils.containsIgnoreCase(str, "L"))
|
|
|
+ {
|
|
|
+ classs.add(new Object[] { Long.valueOf(StringUtils.replaceIgnoreCase(str, "L", "")), Long.class });
|
|
|
+ }
|
|
|
+ // double浮点类型,包含D
|
|
|
+ else if (StringUtils.containsIgnoreCase(str, "D"))
|
|
|
+ {
|
|
|
+ classs.add(new Object[] { Double.valueOf(StringUtils.replaceIgnoreCase(str, "D", "")), Double.class });
|
|
|
+ }
|
|
|
+ // 其他类型归类为整形
|
|
|
+ else
|
|
|
+ {
|
|
|
+ classs.add(new Object[] { Integer.valueOf(str), Integer.class });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return classs;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取参数类型
|
|
|
+ *
|
|
|
+ * @param methodParams 参数相关列表
|
|
|
+ * @return 参数类型列表
|
|
|
+ */
|
|
|
+ public static Class<?>[] getMethodParamsType(List<Object[]> methodParams)
|
|
|
+ {
|
|
|
+ Class<?>[] classs = new Class<?>[methodParams.size()];
|
|
|
+ int index = 0;
|
|
|
+ for (Object[] os : methodParams)
|
|
|
+ {
|
|
|
+ classs[index] = (Class<?>) os[1];
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ return classs;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取参数值
|
|
|
+ *
|
|
|
+ * @param methodParams 参数相关列表
|
|
|
+ * @return 参数值列表
|
|
|
+ */
|
|
|
+ public static Object[] getMethodParamsValue(List<Object[]> methodParams)
|
|
|
+ {
|
|
|
+ Object[] classs = new Object[methodParams.size()];
|
|
|
+ int index = 0;
|
|
|
+ for (Object[] os : methodParams)
|
|
|
+ {
|
|
|
+ classs[index] = (Object) os[0];
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ return classs;
|
|
|
+ }
|
|
|
}
|