ÎļþÃû´Ó ruoyi/src/main/java/com/ruoyi/common/utils/job/JobInvokeUtil.java ÐÞ¸Ä |
| | |
| | | package com.ruoyi.common.utils.job; |
| | | |
| | | 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.project.monitor.domain.SysJob; |
| | | |
| | | /** |
| | | * 任塿§è¡å·¥å
· |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class JobInvokeUtil |
| | | { |
| | | /** |
| | | * æ§è¡æ¹æ³ |
| | | * |
| | | * @param sysJob ç³»ç»ä»»å¡ |
| | | */ |
| | | public static void invokeMethod(SysJob sysJob) throws Exception |
| | | { |
| | | String invokeTarget = sysJob.getInvokeTarget(); |
| | | String beanName = getBeanName(invokeTarget); |
| | | String methodName = getMethodName(invokeTarget); |
| | | List<Object[]> methodParams = getMethodParams(invokeTarget); |
| | | |
| | | if (!isValidClassName(beanName)) |
| | | { |
| | | Object bean = SpringUtils.getBean(beanName); |
| | | invokeMethod(bean, methodName, methodParams); |
| | | } |
| | | else |
| | | { |
| | | Object bean = Class.forName(beanName).newInstance(); |
| | | invokeMethod(bean, methodName, methodParams); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è°ç¨ä»»å¡æ¹æ³ |
| | | * |
| | | * @param bean ç®æ 对象 |
| | | * @param methodName æ¹æ³åç§° |
| | | * @param methodParams æ¹æ³åæ° |
| | | */ |
| | | private static void invokeMethod(Object bean, String methodName, List<Object[]> methodParams) |
| | | throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, |
| | | InvocationTargetException |
| | | { |
| | | if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) |
| | | { |
| | | Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams)); |
| | | method.invoke(bean, getMethodParamsValue(methodParams)); |
| | | } |
| | | else |
| | | { |
| | | Method method = bean.getClass().getDeclaredMethod(methodName); |
| | | 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; |
| | | } |
| | | } |
| | | 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;
|
| | |
|
| | | /**
|
| | | * 任塿§è¡å·¥å
·
|
| | | *
|
| | | * @author ruoyi
|
| | | */
|
| | | public class JobInvokeUtil
|
| | | {
|
| | | /**
|
| | | * æ§è¡æ¹æ³
|
| | | *
|
| | | * @param sysJob ç³»ç»ä»»å¡
|
| | | */
|
| | | public static void invokeMethod(SysJob sysJob) throws Exception
|
| | | {
|
| | | String invokeTarget = sysJob.getInvokeTarget();
|
| | | String beanName = getBeanName(invokeTarget);
|
| | | String methodName = getMethodName(invokeTarget);
|
| | | List<Object[]> methodParams = getMethodParams(invokeTarget);
|
| | |
|
| | | if (!isValidClassName(beanName))
|
| | | {
|
| | | Object bean = SpringUtils.getBean(beanName);
|
| | | invokeMethod(bean, methodName, methodParams);
|
| | | }
|
| | | else
|
| | | {
|
| | | Object bean = Class.forName(beanName).newInstance();
|
| | | invokeMethod(bean, methodName, methodParams);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * è°ç¨ä»»å¡æ¹æ³
|
| | | *
|
| | | * @param bean ç®æ 对象
|
| | | * @param methodName æ¹æ³åç§°
|
| | | * @param methodParams æ¹æ³åæ°
|
| | | */
|
| | | private static void invokeMethod(Object bean, String methodName, List<Object[]> methodParams)
|
| | | throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
|
| | | InvocationTargetException
|
| | | {
|
| | | if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0)
|
| | | {
|
| | | Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams));
|
| | | method.invoke(bean, getMethodParamsValue(methodParams));
|
| | | }
|
| | | else
|
| | | {
|
| | | Method method = bean.getClass().getDeclaredMethod(methodName);
|
| | | 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;
|
| | | }
|
| | | }
|