diff --git a/pom.xml b/pom.xml index c4c0d8fe9bde6bfadea9112d7d1ab91fb78a10ae..c4167139218a22121f9c3863683b944bf626531b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.gitee.starblues springboot-plugin-framework-parent pom - 2.4.5-RELEASE + 2.4.6-RELEASE spring boot 插件开发集成包 diff --git a/springboot-plugin-framework-extension/pom.xml b/springboot-plugin-framework-extension/pom.xml index 86be9e3f69ae32ff0345f91a0e6e7ae5ba2d7c17..c206ec138abd4496a06ff3daa3632fd5c636f2f7 100644 --- a/springboot-plugin-framework-extension/pom.xml +++ b/springboot-plugin-framework-extension/pom.xml @@ -9,7 +9,7 @@ com.gitee.starblues springboot-plugin-framework-extension pom - 2.4.5-RELEASE + 2.4.6-RELEASE spring boot 插件式开发集成包--扩展模块 diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-log/pom.xml b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-log/pom.xml index 3742f2d67f66d711bf95e2d574013cd8543212cb..31a1b6a548522329c1a851057699924bce94168f 100644 --- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-log/pom.xml +++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-log/pom.xml @@ -12,7 +12,7 @@ com.gitee.starblues springboot-plugin-framework-extension-log - 2.4.5-RELEASE + 2.4.6-RELEASE 插件扩展-日志模块扩展 @@ -62,7 +62,7 @@ 3.1.0 1.6 - 2.4.5-RELEASE + 2.4.6-RELEASE 5.0.7.RELEASE 1.2.3 2.14.1 diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/pom.xml b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/pom.xml index eb512f48a55ce1eada5c7bf7fd3f3269df3b01ae..8bbb50190a528fa3a094956e7f9feec93ff587c5 100644 --- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/pom.xml +++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/pom.xml @@ -13,7 +13,7 @@ com.gitee.starblues springboot-plugin-framework-extension-mybatis - 2.4.5-RELEASE + 2.4.6-RELEASE jar 插件扩展-spring boot mybatis 集成扩展 @@ -64,7 +64,7 @@ 3.1.0 1.6 - 2.4.5-RELEASE + 2.4.6-RELEASE 2.0.1 3.4.1 2.1.5 diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-resources/pom.xml b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-resources/pom.xml index 607feddb099d1b29b580f60b942cb6d1c017df7e..70af63ffa2d2985965b0b7260a5efa8391173098 100644 --- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-resources/pom.xml +++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-resources/pom.xml @@ -13,7 +13,7 @@ com.gitee.starblues springboot-plugin-framework-extension-resources - 2.4.5-RELEASE + 2.4.6-RELEASE jar 插件扩展-通过url读取插件中的静态资源 @@ -69,7 +69,7 @@ 5.0.7.RELEASE 4.0.1 - 2.4.5-RELEASE + 2.4.6-RELEASE 2.0.3.RELEASE 2.1.1.RELEASE diff --git a/springboot-plugin-framework/pom.xml b/springboot-plugin-framework/pom.xml index 14290931bcd17f3af2160312052c72f1f217c826..da29449ba45ac6cd072a2b2063df06fa1249b904 100644 --- a/springboot-plugin-framework/pom.xml +++ b/springboot-plugin-framework/pom.xml @@ -13,7 +13,7 @@ com.gitee.starblues springboot-plugin-framework jar - 2.4.5-RELEASE + 2.4.6-RELEASE spring boot 插件式开发集成包 diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java index 3d59a1bc1d8c0e0f9bb9fe1365dc199e79774d9f..2557254ec2090d501c4c03b64c5bc0820a695d8b 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java @@ -3,6 +3,7 @@ package com.gitee.starblues.factory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.annotation.AnnotationBeanNameGenerator; @@ -170,6 +171,22 @@ public class SpringBeanRegister { } } + /** + * 注册BeanDefinitionHolder + * @param definitionHolder BeanDefinitionHolder + */ + public void registerBeanDefinition(BeanDefinitionHolder definitionHolder) { + + String beanName = definitionHolder.getBeanName(); + applicationContext.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition()); + + String[] aliases = definitionHolder.getAliases(); + if (aliases != null) { + for (String alias : aliases) { + applicationContext.registerAlias(beanName, alias); + } + } + } /** * 销毁单例 diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/PluginPipeApplicationContextProcessor.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/PluginPipeApplicationContextProcessor.java index a64d1f13744e054a0343e4284cf7587935e007ab..cfbca03b196888d3e46380d5f514e6a019cfb899 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/PluginPipeApplicationContextProcessor.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/PluginPipeApplicationContextProcessor.java @@ -7,6 +7,7 @@ import com.gitee.starblues.factory.process.pipe.bean.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; +import org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericApplicationContext; @@ -55,6 +56,7 @@ public class PluginPipeApplicationContextProcessor implements PluginPipeProcesso } ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { + registerMustDependencies(pluginApplicationContext, pluginRegistryInfo); installPluginAutoConfiguration(pluginApplicationContext, pluginRegistryInfo); pluginApplicationContext.refresh(); } finally { @@ -76,6 +78,7 @@ public class PluginPipeApplicationContextProcessor implements PluginPipeProcesso Set installAutoConfigClassString = pluginRegistryInfo.getPluginBinder() .bind(PropertyKey.INSTALL_AUTO_CONFIG_CLASS, Bindable.setOf(String.class)) .orElseGet(()->null); + if(ObjectUtils.isEmpty(installAutoConfigClassString)){ return; } @@ -95,6 +98,20 @@ public class PluginPipeApplicationContextProcessor implements PluginPipeProcesso } } + /** + * 定义一些spring-boot中一些必要注册的依赖 + * @param pluginApplicationContext pluginApplicationContext + * @param pluginRegistryInfo pluginRegistryInfo + */ + private void registerMustDependencies(GenericApplicationContext pluginApplicationContext, + PluginRegistryInfo pluginRegistryInfo){ + // 注册AutoConfigurationPackages, 用于插件可自动配置 + AutoConfigurationPackages.register(pluginApplicationContext.getDefaultListableBeanFactory(), + pluginRegistryInfo.getBasePlugin().scanPackage()); + // 注册 ConfigurationPropertiesBindingPostProcessor + ConfigurationPropertiesBindingPostProcessor.register(pluginApplicationContext); + } + @Override public void unRegistry(PluginRegistryInfo pluginRegistryInfo) throws Exception { diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigFileBeanRegistrar.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigFileBeanRegistrar.java index 8206c2f1515efab40395d4dcde68cbcdd5a19729..912334d2dd00c417ce326a9e75b8cbb2241add28 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigFileBeanRegistrar.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigFileBeanRegistrar.java @@ -58,7 +58,10 @@ public class ConfigFileBeanRegistrar implements PluginBeanRegistrar { if(configDefinition == null){ return; } - PluginConfigUtils.FileNamePack fileNamePack = PluginConfigUtils.getConfigFileName(configDefinition, + PluginConfigUtils.FileNamePack fileNamePack = PluginConfigUtils.getConfigFileName( + configDefinition.fileName(), + configDefinition.prodSuffix(), + configDefinition.devSuffix(), integrationConfiguration.environment()); String fileName = PluginConfigUtils.joinConfigFileName(fileNamePack); Object parseObject = null; diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/SpringBootConfigFileRegistrar.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/SpringBootConfigFileRegistrar.java index 52c8c6f71b3efaa9a02690f9bf26a586ca496497..cb8d65a671d5ae3ae4d0cd9c69af054991ac267a 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/SpringBootConfigFileRegistrar.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/SpringBootConfigFileRegistrar.java @@ -121,7 +121,11 @@ public class SpringBootConfigFileRegistrar implements PluginBeanRegistrar{ return null; } RuntimeMode runtimeMode = pluginRegistryInfo.getPluginWrapper().getRuntimeMode(); - return PluginConfigUtils.getConfigFileName(configDefinition, runtimeMode); + return PluginConfigUtils.getConfigFileName( + configDefinition.fileName(), + configDefinition.prodSuffix(), + configDefinition.devSuffix(), + runtimeMode); } /** diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginConfigUtils.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginConfigUtils.java index 7b027e243394a874a285552076cfc1750078d2eb..b9d73888a215ff6a131e8832e7890e288df0ae49 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginConfigUtils.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginConfigUtils.java @@ -17,23 +17,26 @@ public class PluginConfigUtils { /** * 根据项目运行环境模式来获取配置文件名称 - * @param configDefinition 配置的注解 + * @param fileName 文件名称 + * @param prodSuffix 生产环境前缀 + * @param devSuffix 开发环境前缀 * @param runtimeMode 运行模式 * @return 文件名称 */ - public static FileNamePack getConfigFileName(ConfigDefinition configDefinition, + public static FileNamePack getConfigFileName(String fileName, + String prodSuffix, + String devSuffix, RuntimeMode runtimeMode){ - String fileName = configDefinition.fileName(); if(StringUtils.isNullOrEmpty(fileName)){ return null; } String suffix = ""; if(runtimeMode == RuntimeMode.DEPLOYMENT){ // 生产环境 - suffix = configDefinition.prodSuffix(); + suffix = prodSuffix; } else if(runtimeMode == RuntimeMode.DEVELOPMENT){ // 开发环境 - suffix = configDefinition.devSuffix(); + suffix = devSuffix; } return new FileNamePack(fileName, suffix); @@ -47,6 +50,9 @@ public class PluginConfigUtils { } public static String joinConfigFileName(String fileName, String suffix){ + if(StringUtils.isNullOrEmpty(fileName)){ + return null; + } String fileNamePrefix; String fileNamePrefixSuffix; @@ -61,7 +67,7 @@ public class PluginConfigUtils { if(suffix == null){ suffix = ""; } - if(!suffix.startsWith(DO)){ + if(StringUtils.isNotNullOrEmpty(suffix) && !suffix.startsWith(DO)){ suffix = DO + suffix; } return fileNamePrefix + suffix + fileNamePrefixSuffix; diff --git a/springboot-plugin-framework/src/test/java/com/gitee/starblues/utils/PluginConfigUtilsTest.java b/springboot-plugin-framework/src/test/java/com/gitee/starblues/utils/PluginConfigUtilsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e350ce7d80dc0261a112addb28b0a54b915e8841 --- /dev/null +++ b/springboot-plugin-framework/src/test/java/com/gitee/starblues/utils/PluginConfigUtilsTest.java @@ -0,0 +1,68 @@ +package com.gitee.starblues.utils; + +import org.junit.Assert; +import org.junit.Test; +import org.pf4j.RuntimeMode; + +/** + * @author starBlues + * @version 1.0 + */ +public class PluginConfigUtilsTest { + + + @Test + public void testGetConfigFileName(){ + String fileName = "fileName.yml"; + String prod = "prod"; + String dev = "dev"; + PluginConfigUtils.FileNamePack configFileName = PluginConfigUtils.getConfigFileName(fileName, + prod, dev, RuntimeMode.DEPLOYMENT); + Assert.assertNotNull(configFileName); + Assert.assertEquals(fileName, configFileName.getSourceFileName()); + Assert.assertEquals(prod, configFileName.getFileSuffix()); + + configFileName = PluginConfigUtils.getConfigFileName(fileName, + prod, dev, RuntimeMode.DEVELOPMENT); + Assert.assertNotNull(configFileName); + Assert.assertEquals(fileName, configFileName.getSourceFileName()); + Assert.assertEquals(dev, configFileName.getFileSuffix()); + } + + + @Test + public void testJoinConfigFileName_1(){ + String fileName = "fileName.yml"; + String suffix = "prod"; + String joinConfigFileName = PluginConfigUtils.joinConfigFileName(fileName, suffix); + Assert.assertNotNull(joinConfigFileName); + Assert.assertEquals("fileName-prod.yml", joinConfigFileName); + } + + @Test + public void testJoinConfigFileName_2(){ + String fileName = "fileName.yml"; + String suffix = ""; + String joinConfigFileName = PluginConfigUtils.joinConfigFileName(fileName, suffix); + Assert.assertNotNull(joinConfigFileName); + Assert.assertEquals("fileName.yml", joinConfigFileName); + } + + @Test + public void testJoinConfigFileName_3(){ + String fileName = "fileName.yml"; + String suffix = null; + String joinConfigFileName = PluginConfigUtils.joinConfigFileName(fileName, suffix); + Assert.assertNotNull(joinConfigFileName); + Assert.assertEquals("fileName.yml", joinConfigFileName); + } + + @Test + public void testJoinConfigFileName_4(){ + String fileName = null; + String suffix = null; + String joinConfigFileName = PluginConfigUtils.joinConfigFileName(fileName, suffix); + Assert.assertNull(joinConfigFileName); + } + +}