From 26ff0ed55a199c52aa2df8c4813dd1df694c8f35 Mon Sep 17 00:00:00 2001 From: StarBlues Date: Sun, 14 Aug 2022 11:26:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=90=AFbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bootstrap/ConfigurePluginEnvironment.java | 6 --- .../PluginOneselfSpringApplication.java | 14 +------ .../DefaultBootstrapLauncherFactory.java | 3 -- .../ComposeSpringPluginProcessor.java | 11 +++++ .../processor/SpringPluginProcessor.java | 1 + .../ConfigureMainPluginEnvironment.java | 10 ++--- .../processor/oneself/OneselfProcessor.java | 42 ++++++++++--------- .../starblues/loader/DevelopmentMode.java | 5 --- .../loader/launcher/AbstractMainLauncher.java | 3 +- .../loader/launcher/DevLauncher.java | 9 ++-- .../launcher/DevelopmentModeSetting.java | 23 ++++++---- .../loader/launcher/ProdLauncher.java | 20 ++++----- 12 files changed, 69 insertions(+), 78 deletions(-) rename spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/{ => processor/oneself}/ConfigureMainPluginEnvironment.java (92%) rename spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/simple/SimpleBaseLauncher.java => spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/OneselfProcessor.java (34%) diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigurePluginEnvironment.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigurePluginEnvironment.java index 4e09169..536b4e3 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigurePluginEnvironment.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigurePluginEnvironment.java @@ -91,12 +91,6 @@ public class ConfigurePluginEnvironment { } catch (Exception ex){ logger.error("LiveBeansView.registerApplicationContext失败. {}", ex.getMessage(), ex); } - if(processorContext.runMode() == ProcessorContext.RunMode.ONESELF){ - ConfigureMainPluginEnvironment configureMainPluginEnvironment = - new ConfigureMainPluginEnvironment(processorContext); - configureMainPluginEnvironment.configureEnvironment(environment, args); - env.put(AutoIntegrationConfiguration.ENABLE_STARTER_KEY, false); - } if(DevelopmentModeSetting.coexist()){ env.put(AutoIntegrationConfiguration.ENABLE_STARTER_KEY, false); diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/PluginOneselfSpringApplication.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/PluginOneselfSpringApplication.java index 677b081..d7db19c 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/PluginOneselfSpringApplication.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/PluginOneselfSpringApplication.java @@ -2,12 +2,9 @@ package com.gitee.starblues.bootstrap; import com.gitee.starblues.bootstrap.processor.ProcessorContext; import com.gitee.starblues.bootstrap.processor.SpringPluginProcessor; -import com.gitee.starblues.integration.operator.EmptyPluginOperator; -import com.gitee.starblues.integration.user.DefaultPluginUser; -import com.gitee.starblues.spring.extract.DefaultOpExtractFactory; +import com.gitee.starblues.bootstrap.processor.oneself.ConfigureMainPluginEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.SpringApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.GenericApplicationContext; @@ -49,6 +46,7 @@ public class PluginOneselfSpringApplication extends SpringApplication { protected void configureEnvironment(ConfigurableEnvironment environment, String[] args) { super.configureEnvironment(environment, args); configurePluginEnvironment.configureEnvironment(environment, args); + new ConfigureMainPluginEnvironment(processorContext).configureEnvironment(environment, args); } @Override @@ -62,7 +60,6 @@ public class PluginOneselfSpringApplication extends SpringApplication { processorContext.setApplicationContext(this.applicationContext); PluginContextHolder.initialize(processorContext); pluginProcessor.initialize(processorContext); - registerMainBean(); return super.run(args); } catch (Exception e) { pluginProcessor.failure(processorContext); @@ -80,11 +77,4 @@ public class PluginOneselfSpringApplication extends SpringApplication { pluginProcessor.refreshAfter(processorContext); } - private void registerMainBean(){ - DefaultListableBeanFactory beanFactory = applicationContext.getDefaultListableBeanFactory(); - beanFactory.registerSingleton("extractFactory", new DefaultOpExtractFactory()); - beanFactory.registerSingleton("pluginUser", new DefaultPluginUser(applicationContext)); - beanFactory.registerSingleton("pluginOperator", new EmptyPluginOperator()); - } - } diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/DefaultBootstrapLauncherFactory.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/DefaultBootstrapLauncherFactory.java index f76074f..fcf5d72 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/DefaultBootstrapLauncherFactory.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/DefaultBootstrapLauncherFactory.java @@ -23,7 +23,6 @@ import com.gitee.starblues.bootstrap.processor.ProcessorContext; import com.gitee.starblues.bootstrap.processor.SpringPluginProcessor; import com.gitee.starblues.core.launcher.plugin.PluginInteractive; import com.gitee.starblues.loader.launcher.DevelopmentModeSetting; -import com.gitee.starblues.loader.launcher.simple.SimpleBaseLauncher; import java.util.List; @@ -48,8 +47,6 @@ public class DefaultBootstrapLauncherFactory implements BootstrapLauncherFactory bootstrapLauncher = new IsolationBootstrapLauncher(bootstrap, pluginProcessor, pluginInteractive); } else if(DevelopmentModeSetting.coexist()){ bootstrapLauncher = new CoexistBootstrapLauncher(bootstrap, pluginProcessor, pluginInteractive); - } else if(DevelopmentModeSetting.simple()){ - throw new RuntimeException("暂未实现[" + DevelopmentModeSetting.getDevelopmentMode().toString() + "]模式"); } else { bootstrapLauncher = new OneselfBootstrapLauncher(bootstrap, pluginProcessor, pluginInteractive); } diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/ComposeSpringPluginProcessor.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/ComposeSpringPluginProcessor.java index 63e7911..c21dc11 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/ComposeSpringPluginProcessor.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/ComposeSpringPluginProcessor.java @@ -18,6 +18,7 @@ package com.gitee.starblues.bootstrap.processor; import com.gitee.starblues.bootstrap.SpringPluginBootstrap; import com.gitee.starblues.bootstrap.annotation.DisablePluginWeb; +import com.gitee.starblues.bootstrap.processor.oneself.OneselfProcessor; import com.gitee.starblues.bootstrap.processor.web.PluginControllerProcessor; import com.gitee.starblues.bootstrap.processor.web.PluginInterceptorsProcessor; import com.gitee.starblues.bootstrap.processor.web.PluginSpringDocControllerProcessor; @@ -72,6 +73,7 @@ public class ComposeSpringPluginProcessor implements SpringPluginProcessor { List processors = new ArrayList<>(); addDefaultProcessors(context, processors); addDefaultWebEnvProcessors(context, processors); + addOneselfProcessors(context, processors); processors.addAll(this.processors); this.processors = processors.stream() .filter(p->{ @@ -178,6 +180,15 @@ public class ComposeSpringPluginProcessor implements SpringPluginProcessor { ProcessorUtils.add(processors, PluginSpringDocControllerProcessor::new); } + /** + * 添加 Oneself 模式处理者 + * @param context ProcessorContext + * @param processors 处理者容器集合 + */ + private void addOneselfProcessors(ProcessorContext context, List processors) { + processors.add(new OneselfProcessor()); + } + private void processException(SpringPluginProcessor processor, String executeType, Throwable e, boolean isThrow) throws ProcessorException{ String error = "Processor[" + processor.getClass().getName() + "] execute[" + executeType + "] failure : " diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/SpringPluginProcessor.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/SpringPluginProcessor.java index 5b95946..ce59321 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/SpringPluginProcessor.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/SpringPluginProcessor.java @@ -26,6 +26,7 @@ import com.gitee.starblues.utils.OrderPriority; */ public interface SpringPluginProcessor extends Order { + /** * 初始化时 * @param context ProcessorContext diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigureMainPluginEnvironment.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/ConfigureMainPluginEnvironment.java similarity index 92% rename from spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigureMainPluginEnvironment.java rename to spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/ConfigureMainPluginEnvironment.java index 912f254..0471be3 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/ConfigureMainPluginEnvironment.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/ConfigureMainPluginEnvironment.java @@ -14,8 +14,9 @@ * limitations under the License. */ -package com.gitee.starblues.bootstrap; +package com.gitee.starblues.bootstrap.processor.oneself; +import com.gitee.starblues.bootstrap.SpringPluginBootstrap; import com.gitee.starblues.bootstrap.annotation.OneselfConfig; import com.gitee.starblues.bootstrap.processor.ProcessorContext; import com.gitee.starblues.bootstrap.utils.AnnotationUtils; @@ -41,12 +42,12 @@ import java.util.*; * @version 3.0.0 * @since 3.0.0 */ -class ConfigureMainPluginEnvironment { +public class ConfigureMainPluginEnvironment { private final ProcessorContext processorContext; private final List propertySourceLoaders; - ConfigureMainPluginEnvironment(ProcessorContext processorContext) { + public ConfigureMainPluginEnvironment(ProcessorContext processorContext) { this.processorContext = processorContext; this.propertySourceLoaders = new ArrayList<>(2); @@ -54,7 +55,7 @@ class ConfigureMainPluginEnvironment { this.propertySourceLoaders.add(new PropertiesPropertySourceLoader()); } - void configureEnvironment(ConfigurableEnvironment environment, String[] args) { + public void configureEnvironment(ConfigurableEnvironment environment, String[] args) { SpringPluginBootstrap springPluginBootstrap = processorContext.getSpringPluginBootstrap(); OneselfConfig oneselfConfig = AnnotationUtils.findAnnotation(springPluginBootstrap.getClass(), OneselfConfig.class); @@ -104,5 +105,4 @@ class ConfigureMainPluginEnvironment { throw new RuntimeException(e); } } - } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/simple/SimpleBaseLauncher.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/OneselfProcessor.java similarity index 34% rename from spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/simple/SimpleBaseLauncher.java rename to spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/OneselfProcessor.java index fce2b97..8808ba2 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/simple/SimpleBaseLauncher.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/processor/oneself/OneselfProcessor.java @@ -14,37 +14,41 @@ * limitations under the License. */ -package com.gitee.starblues.loader.launcher.simple; - -import com.gitee.starblues.loader.classloader.GeneralUrlClassLoader; -import com.gitee.starblues.loader.launcher.AbstractMainLauncher; -import com.gitee.starblues.loader.launcher.isolation.IsolationBaseLauncher; -import com.gitee.starblues.loader.launcher.runner.MethodRunner; +package com.gitee.starblues.bootstrap.processor.oneself; +import com.gitee.starblues.bootstrap.processor.ProcessorContext; +import com.gitee.starblues.bootstrap.processor.ProcessorException; +import com.gitee.starblues.bootstrap.processor.SpringPluginProcessor; +import com.gitee.starblues.integration.operator.EmptyPluginOperator; +import com.gitee.starblues.integration.user.DefaultPluginUser; +import com.gitee.starblues.spring.extract.DefaultOpExtractFactory; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.context.support.GenericApplicationContext; /** - * simple 模式 launcher + * 子启动处理器 * * @author starBlues - * @since 3.0.4 * @version 3.0.4 + * @since 3.0.4 */ -public class SimpleBaseLauncher extends AbstractMainLauncher { - - private final MethodRunner methodRunner; +public class OneselfProcessor implements SpringPluginProcessor { - public SimpleBaseLauncher(MethodRunner methodRunner) { - this.methodRunner = methodRunner; + @Override + public void initialize(ProcessorContext context) throws ProcessorException { + registerMainBean(context.getApplicationContext()); } @Override - protected ClassLoader createClassLoader(String... args) throws Exception { - return new GeneralUrlClassLoader(IsolationBaseLauncher.MAIN_CLASS_LOADER_NAME, this.getClass().getClassLoader()); + public ProcessorContext.RunMode runMode() { + return ProcessorContext.RunMode.ONESELF; } - @Override - protected ClassLoader launch(ClassLoader classLoader, String... args) throws Exception { - methodRunner.run(classLoader); - return classLoader; + private void registerMainBean(GenericApplicationContext applicationContext){ + DefaultListableBeanFactory beanFactory = applicationContext.getDefaultListableBeanFactory(); + beanFactory.registerSingleton("extractFactory", new DefaultOpExtractFactory()); + beanFactory.registerSingleton("pluginUser", new DefaultPluginUser(applicationContext)); + beanFactory.registerSingleton("pluginOperator", new EmptyPluginOperator()); } + } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/DevelopmentMode.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/DevelopmentMode.java index ac3e555..eddd279 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/DevelopmentMode.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/DevelopmentMode.java @@ -35,9 +35,4 @@ public abstract class DevelopmentMode { */ public static final String COEXIST = "coexist"; - /** - * 简单模式 - */ - public static final String SIMPLE = "simple"; - } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/AbstractMainLauncher.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/AbstractMainLauncher.java index 06be41d..3860e83 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/AbstractMainLauncher.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/AbstractMainLauncher.java @@ -81,8 +81,7 @@ public abstract class AbstractMainLauncher extends AbstractLauncher } } catch (ClassNotFoundException e) { if(!DevelopmentModeSetting.isolation()){ - String mode = DevelopmentMode.COEXIST + "/" + DevelopmentMode.SIMPLE; - throw new RuntimeException("[" + mode + "]模式" + + throw new RuntimeException("[" + DevelopmentMode.COEXIST + "]模式" + "需要将[" + SPRING_PLUGIN_BOOTSTRAP_COORDINATE + "]依赖定义到主程序中!"); } } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevLauncher.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevLauncher.java index ae80c9b..cc112ab 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevLauncher.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevLauncher.java @@ -19,7 +19,6 @@ package com.gitee.starblues.loader.launcher; import com.gitee.starblues.loader.launcher.coexist.CoexistBaseLauncher; import com.gitee.starblues.loader.launcher.isolation.IsolationBaseLauncher; import com.gitee.starblues.loader.launcher.runner.MethodRunner; -import com.gitee.starblues.loader.launcher.simple.SimpleBaseLauncher; import lombok.AllArgsConstructor; /** @@ -39,12 +38,12 @@ public class DevLauncher implements Launcher{ MethodRunner methodRunner = new MethodRunner(springBootstrap.getClass().getName(), SPRING_BOOTSTRAP_RUN_METHOD, args); AbstractMainLauncher launcher; - if(DevelopmentModeSetting.coexist()){ + if(DevelopmentModeSetting.isolation()){ + launcher = new IsolationBaseLauncher(methodRunner); + } else if(DevelopmentModeSetting.coexist()) { launcher = new CoexistBaseLauncher(methodRunner); - } else if(DevelopmentModeSetting.simple()) { - launcher = new SimpleBaseLauncher(methodRunner); } else { - launcher = new IsolationBaseLauncher(methodRunner); + throw DevelopmentModeSetting.getUnknownModeException(); } return launcher.run(args); } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevelopmentModeSetting.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevelopmentModeSetting.java index 4ee30c5..11f08c6 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevelopmentModeSetting.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/DevelopmentModeSetting.java @@ -27,7 +27,7 @@ import com.gitee.starblues.loader.DevelopmentMode; */ public class DevelopmentModeSetting { - private static String developmentMode = DevelopmentMode.ISOLATION; + private static String developmentMode; static void setDevelopmentMode(String developmentMode) { DevelopmentModeSetting.developmentMode = checkModeKey(developmentMode); @@ -41,26 +41,31 @@ public class DevelopmentModeSetting { return DevelopmentMode.COEXIST.equalsIgnoreCase(developmentMode); } - public static boolean simple(){ - return DevelopmentMode.SIMPLE.equalsIgnoreCase(developmentMode); - } - public static String getDevelopmentMode(){ return developmentMode; } + public static IllegalStateException getUnknownModeException(){ + return getUnknownModeException(null); + } + + public static IllegalStateException getUnknownModeException(String developmentMode){ + if(developmentMode == null || "".equals(developmentMode)){ + developmentMode = DevelopmentModeSetting.developmentMode; + } + return new IllegalStateException("不支持开发模式:" + developmentMode); + } + private static String checkModeKey(String developmentMode){ if(developmentMode == null || "".equals(developmentMode)){ - throw new RuntimeException("developmentMode设置不能为空"); + throw new RuntimeException("developmentMode 设置不能为空"); } if(DevelopmentMode.ISOLATION.equalsIgnoreCase(developmentMode)){ return developmentMode; } else if(DevelopmentMode.COEXIST.equalsIgnoreCase(developmentMode)){ return developmentMode; - } else if(DevelopmentMode.SIMPLE.equalsIgnoreCase(developmentMode)){ - return developmentMode; } else { - throw new RuntimeException("不支持开发模式: " + developmentMode); + throw getUnknownModeException(developmentMode); } } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/ProdLauncher.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/ProdLauncher.java index eb2893b..34117cc 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/ProdLauncher.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/ProdLauncher.java @@ -17,16 +17,12 @@ package com.gitee.starblues.loader.launcher; import com.gitee.starblues.loader.jar.JarFile; -import com.gitee.starblues.loader.launcher.coexist.CoexistBaseLauncher; import com.gitee.starblues.loader.launcher.coexist.CoexistFastJarLauncher; import com.gitee.starblues.loader.launcher.coexist.CoexistJarOuterLauncher; -import com.gitee.starblues.loader.launcher.isolation.IsolationBaseLauncher; import com.gitee.starblues.loader.launcher.isolation.IsolationFastJarLauncher; import com.gitee.starblues.loader.launcher.isolation.IsolationJarOuterLauncher; import com.gitee.starblues.loader.launcher.runner.MethodRunner; -import com.gitee.starblues.loader.launcher.simple.SimpleBaseLauncher; import com.gitee.starblues.loader.utils.ObjectUtils; -import lombok.AllArgsConstructor; import java.io.File; import java.net.URI; @@ -106,24 +102,24 @@ public class ProdLauncher implements Launcher{ private AbstractMainLauncher getFastJarLauncher(MethodRunner methodRunner, File rootJarFile){ AbstractMainLauncher launcher; - if(DevelopmentModeSetting.coexist()){ - launcher = new CoexistFastJarLauncher(methodRunner, rootJarFile); - } else if(DevelopmentModeSetting.simple()) { + if(DevelopmentModeSetting.isolation()){ + launcher = new IsolationFastJarLauncher(methodRunner, rootJarFile); + } else if(DevelopmentModeSetting.coexist()){ launcher = new CoexistFastJarLauncher(methodRunner, rootJarFile); } else { - launcher = new IsolationFastJarLauncher(methodRunner, rootJarFile); + throw DevelopmentModeSetting.getUnknownModeException(); } return launcher; } private AbstractMainLauncher getJarOuterLauncher(MethodRunner methodRunner, File rootJarFile){ AbstractMainLauncher launcher; - if(DevelopmentModeSetting.coexist()){ - launcher = new CoexistJarOuterLauncher(methodRunner, rootJarFile); - } else if(DevelopmentModeSetting.simple()) { + if(DevelopmentModeSetting.isolation()){ + launcher = new IsolationJarOuterLauncher(methodRunner, rootJarFile); + } else if(DevelopmentModeSetting.coexist()){ launcher = new CoexistJarOuterLauncher(methodRunner, rootJarFile); } else { - launcher = new IsolationJarOuterLauncher(methodRunner, rootJarFile); + throw DevelopmentModeSetting.getUnknownModeException(); } return launcher; } -- Gitee