添加 solon 的集成适配及示例

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

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

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

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

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

Loading…
Cancel
Save