Pre Merge pull request !22 from xxssyyyyssxx/master

pull/22/MERGE
xxssyyyyssxx 5 years ago committed by Gitee
commit 27685fb921

@ -26,6 +26,12 @@
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<dependency>
<groupId>top.jfunc.common</groupId>
<artifactId>utils</artifactId>
<version>1.8.3.5</version>
</dependency>
<!-- ********************** plugin ********************** -->
<!-- groovy-all -->

@ -3,6 +3,7 @@ package com.xxl.job.core.executor;
import com.xxl.job.core.biz.AdminBiz;
import com.xxl.job.core.biz.client.AdminBizClient;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobFileAppender;
import com.xxl.job.core.server.EmbedServer;
import com.xxl.job.core.thread.JobLogFileCleanThread;
@ -12,10 +13,14 @@ import com.xxl.job.core.util.IpUtil;
import com.xxl.job.core.util.NetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.jfunc.common.utils.BeanUtil;
import top.jfunc.common.utils.ClassUtil;
import top.jfunc.common.utils.StrUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@ -176,7 +181,33 @@ public class XxlJobExecutor {
logger.info(">>>>>>>>>>> xxl-job register jobhandler success, name:{}, jobHandler:{}", name, jobHandler);
return jobHandlerRepository.put(name, jobHandler);
}
/**
* {@link IJobHandler}{@link IJobHandler}
*/
public static void registJobHandler(String... packages){
for (String onePackage : packages) {
Set<Class<?>> jobHandlerClasses = ClassUtil.scanPackageBySuper(onePackage, true, IJobHandler.class);
for (Class<?> jobHandlerClass : jobHandlerClasses) {
String name = determineHandlerName(jobHandlerClass);
IJobHandler jobHandler = BeanUtil.newInstance(jobHandlerClass);
registJobHandler(name , jobHandler);
}
}
}
/**
* 使{@link XxlJob}
*/
private static String determineHandlerName(Class<?> jobHandlerClass) {
String name = StrUtil.lowerFirst(jobHandlerClass.getSimpleName());
if(jobHandlerClass.isAnnotationPresent(XxlJob.class)){
String value = jobHandlerClass.getAnnotation(XxlJob.class).value();
if(!"".equals(value)){
name = value;
}
}
return name;
}
// ---------------------- job thread repository ----------------------
private static ConcurrentMap<Integer, JobThread> jobThreadRepository = new ConcurrentHashMap<Integer, JobThread>();

@ -3,6 +3,7 @@ package com.xxl.job.executor.sample.frameless;
import com.xxl.job.executor.sample.frameless.config.FrameLessXxlJobConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.jfunc.common.thread.HoldProcessor;
import java.util.concurrent.TimeUnit;
@ -18,21 +19,26 @@ public class FramelessApplication {
// start
FrameLessXxlJobConfig.getInstance().initXxlJobExecutor();
// Blocks until interrupted
while (true) {
try {
TimeUnit.HOURS.sleep(1);
} catch (InterruptedException e) {
break;
}
}
waitHere();
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
// destory
FrameLessXxlJobConfig.getInstance().destoryXxlJobExecutor();
}
}
private static void waitHere() {
final HoldProcessor holdProcessor = new HoldProcessor();
holdProcessor.startAwait();
logger.info("程序开始等待");
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
logger.info("收到kill 信号,执行清理程序");
//在关闭的时候释放资源
FrameLessXxlJobConfig.getInstance().destoryXxlJobExecutor();
holdProcessor.stopAwait();
}
});
}
}

Loading…
Cancel
Save