添加 solon 的集成适配及示例

pull/26/head
noear 4 years ago
parent 39c59cf56e
commit 39f9dc5570

@ -31,7 +31,7 @@
<spring.version>5.3.3</spring.version>
<spring-boot.version>2.4.2</spring-boot.version>
<solon.version>1.4.4</solon.version>
<solon.version>1.4.5</solon.version>
<mybatis-spring-boot-starter.version>2.1.4</mybatis-spring-boot-starter.version>
<mysql-connector-java.version>8.0.23</mysql-connector-java.version>

@ -1,35 +0,0 @@
package com.xxl.job.solon;
import com.xxl.job.core.executor.XxlJobExecutor;
import org.noear.solon.cloud.annotation.CloudJob;
import com.xxl.job.solon.service.CloudJobServiceImpl;
import org.noear.solon.core.BeanExtractor;
import org.noear.solon.core.BeanWrap;
import org.noear.solon.core.handle.Action;
import java.lang.reflect.Method;
/**
* @author noear
* @since 1.4
*/
class ExtractorOfCloudJob implements BeanExtractor<CloudJob> {
@Override
public void doExtract(BeanWrap bw, Method method, CloudJob anno) {
String name = anno.value();
if (name.trim().length() == 0) {
throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bw.clz() + "#" + method.getName() + "] .");
}
if (XxlJobExecutor.loadJobHandler(name) != null) {
throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
}
method.setAccessible(true);
Action action = new Action(bw, method);
// registry jobhandler
CloudJobServiceImpl.instance.register(name, action);
}
}

@ -1,15 +1,15 @@
package com.xxl.job.solon;
import com.xxl.job.core.executor.XxlJobExecutor;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.noear.solon.SolonApp;
import org.noear.solon.cloud.CloudManager;
import org.noear.solon.cloud.annotation.CloudJob;
import com.xxl.job.solon.service.CloudJobServiceImpl;
import org.noear.solon.cloud.impl.CloudJobBuilder;
import org.noear.solon.cloud.impl.CloudJobExtractor;
import org.noear.solon.core.Aop;
import org.noear.solon.core.Plugin;
import org.noear.solon.core.handle.Handler;
/**
* @author noear
@ -22,19 +22,15 @@ public class XPluginImp implements Plugin {
return;
}
//add extractor for bean method
Aop.context().beanExtractorAdd(XxlJob.class, new ExtractorOfXxlJobMethod());
Aop.context().beanExtractorAdd(CloudJob.class, new ExtractorOfCloudJob());
//register Job Service
CloudManager.register(CloudJobServiceImpl.instance);
Aop.context().beanBuilderAdd(CloudJob.class, (clz, bw, anno) -> {
if (Handler.class.isAssignableFrom(clz)) {
CloudJobServiceImpl.instance.register(anno.value(), bw.raw());
} else if (IJobHandler.class.isAssignableFrom(clz)) {
XxlJobExecutor.registJobHandler(anno.value(), bw.raw());
}
});
//add extractor for bean method
Aop.context().beanExtractorAdd(XxlJob.class, new XxlJobExtractor());
Aop.context().beanExtractorAdd(CloudJob.class, new CloudJobExtractor());
Aop.context().beanBuilderAdd(CloudJob.class,new CloudJobBuilder());
Aop.context().beanMake(AutoConfigXxlJob.class);
Aop.context().beanMake(XxlJobAutoConfig.class);
Aop.beanOnloaded(() -> {
try {
@ -44,8 +40,5 @@ public class XPluginImp implements Plugin {
throw new RuntimeException(e);
}
});
//登记Job服务
CloudManager.register(CloudJobServiceImpl.instance);
}
}

@ -17,8 +17,8 @@ import org.slf4j.LoggerFactory;
* @since 1.4
*/
@Configuration
public class AutoConfigXxlJob {
private static final Logger logger = LoggerFactory.getLogger(AutoConfigXxlJob.class);
public class XxlJobAutoConfig {
private static final Logger logger = LoggerFactory.getLogger(XxlJobAutoConfig.class);
@Inject("${xxl.job.admin.addresses}")
private String adminAddresses;

@ -12,7 +12,7 @@ import java.lang.reflect.Method;
* @author noear
* @since 1.4
*/
class ExtractorOfXxlJobMethod implements BeanExtractor<XxlJob> {
class XxlJobExtractor implements BeanExtractor<XxlJob> {
@Override
public void doExtract(BeanWrap bw, Method method, XxlJob anno) {
String name = anno.value();

@ -12,8 +12,13 @@ public class CloudJobServiceImpl implements CloudJobService {
public static final CloudJobService instance = new CloudJobServiceImpl();
@Override
public boolean register(String name, Handler handler) {
public boolean register(String name, String description, Handler handler) {
XxlJobExecutor.registJobHandler(name, new CloudJobHanderProxy(handler));
return true;
}
@Override
public boolean isRegistered(String name) {
return XxlJobExecutor.loadJobHandler(name) != null;
}
}

Loading…
Cancel
Save