瀏覽代碼

修复流程修改后无法加载新流程问题

airhead 7 年之前
父節點
當前提交
b503aa9760
共有 1 個文件被更改,包括 3 次插入17 次删除
  1. 3 17
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelStartBoot.java

+ 3 - 17
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelStartBoot.java

@ -1,23 +1,15 @@
package com.yihu.hos.broker.services.camel;
import com.yihu.hos.broker.common.log.TracerFormatter;
import com.yihu.hos.broker.services.BrokerServerService;
import com.yihu.hos.broker.util.lang.DynamicClassLoader;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
import org.apache.camel.processor.interceptor.Tracer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.SynchronousQueue;
/**
@ -47,15 +39,8 @@ public class CamelStartBoot {
            context.setTracing(true);
            context.start();
            List<URL> URLs = new ArrayList<>();
            ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
            ClassLoader camelClassLoader = new URLClassLoader(URLs.toArray(new URL[]{}), currentClassLoader);
            Thread.currentThread().setContextClassLoader(camelClassLoader);
            context.setApplicationContextClassLoader(currentClassLoader);
            logger.info("Apache Camel Context 启动完成...");
            brokerServerService.login();
            //如果没有收到其它线程的加载请求,主线程将停止在这里,所以该while之后不能有其他业务逻辑
@ -63,7 +48,8 @@ public class CamelStartBoot {
            String className;
            while ((className = camelContextOperateQueue.take()) != null) {
                try {
                    Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) camelClassLoader.loadClass(className);
                    DynamicClassLoader dynamicClassLoader = new DynamicClassLoader(SystemCamelContext.getResource(this).getPath());
                    Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) dynamicClassLoader.loadClass(className);
                    if (routeBuilderClass != null) {
                        RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                        capableBeanFactory.autowireBean(routeBuilder);