diff --git "a/doc/\351\233\206\346\210\220\346\226\207\346\241\243.pdf" "b/doc/\351\233\206\346\210\220\346\226\207\346\241\243.pdf"
new file mode 100644
index 0000000000000000000000000000000000000000..6ae270090d5c0e28399c5ebb37903f4019e71d13
Binary files /dev/null and "b/doc/\351\233\206\346\210\220\346\226\207\346\241\243.pdf" differ
diff --git a/example/basic-example/basic-example-main/pom.xml b/example/basic-example/basic-example-main/pom.xml
index af9add2398431ae9583be18e6a69e32b486b0f33..2a61c257c8ebf717ea0ecf91ecf735df44f11e19 100644
--- a/example/basic-example/basic-example-main/pom.xml
+++ b/example/basic-example/basic-example-main/pom.xml
@@ -13,13 +13,13 @@
com.gitee.starblues
basic-example-main
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
2.7.0
1.6
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java
index 838cbdd5041bd07f6fe9c6aa8071f4c5f75668bf..9ee0a9aab494093e5f0c0e017f2c07230c8d6fe2 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java
@@ -1,11 +1,10 @@
package com.basic.example.main.config;
-import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
import com.gitee.starblues.integration.listener.PluginListener;
import com.gitee.starblues.integration.user.PluginUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
/**
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java
index 3c24ec22073856d388a605a72d2f21ce34af0bdc..f3f238fde3d8aafd6c8ad1c288bd9dd78386e1cb 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java
@@ -1,10 +1,7 @@
package com.basic.example.main.config;
-import com.gitee.starblues.integration.*;
-import com.gitee.starblues.integration.initialize.AutoPluginInitializer;
-import com.gitee.starblues.integration.initialize.PluginInitializer;
-import org.pf4j.PluginException;
-import org.pf4j.PluginManager;
+import com.gitee.starblues.integration.application.PluginApplication;
+import com.gitee.starblues.integration.application.AutoPluginApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -17,40 +14,14 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class PluginBeanConfig {
- /**
- * 通过默认的集成工厂返回 PluginManager
- * @param integrationConfiguration 集成的配置文件
- * @return
- * @throws PluginException
- */
- @Bean
- public PluginManager pluginManager(IntegrationConfiguration integrationConfiguration) throws PluginException {
- IntegrationFactory integrationFactory = new DefaultIntegrationFactory();
- return integrationFactory.getPluginManager(integrationConfiguration);
- }
/**
- * 定义默认的插件应用。使用可以注入它操作插件。
- * @return
+ * 定义插件应用。使用可以注入它操作插件。
+ * @return PluginApplication
*/
@Bean
public PluginApplication pluginApplication(){
- DefaultPluginApplication defaultPluginApplication = new DefaultPluginApplication();
- defaultPluginApplication.addListener(ExamplePluginListener.class);
- return defaultPluginApplication;
- }
-
- /**
- * 初始化插件。此处定义可以在系统启动时自动加载插件。
- * 如果想手动加载插件, 则可以使用 com.plugin.development.integration.initialize.ManualPluginInitializer 来初始化插件。
- * @param pluginApplication
- * @return
- */
- @Bean
- public PluginInitializer pluginInitializer(PluginApplication pluginApplication,
- PluginListener pluginListener){
- AutoPluginInitializer autoPluginInitializer = new AutoPluginInitializer(pluginApplication);
- autoPluginInitializer.setPluginInitializerListener(pluginListener);
- return autoPluginInitializer;
+ // 实例化自动初始化插件的PluginApplication
+ return new AutoPluginApplication();
}
}
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/ConsoleNameFactory.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/ConsoleNameFactory.java
index 889b35f20917ec2da7a73459e304d9cc0aa77c57..8315a9e6a5421ea480166e261dbb243b70487cd9 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/ConsoleNameFactory.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/ConsoleNameFactory.java
@@ -1,6 +1,6 @@
package com.basic.example.main.plugin;
-import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
import com.gitee.starblues.integration.refresh.AbstractPluginSpringBeanRefresh;
import org.springframework.stereotype.Component;
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/Hello.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/Hello.java
new file mode 100644
index 0000000000000000000000000000000000000000..197595b005e497bf72cde9573dedf65433447dab
--- /dev/null
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/plugin/Hello.java
@@ -0,0 +1,16 @@
+package com.basic.example.main.plugin;
+
+import org.pf4j.ExtensionPoint;
+
+/**
+ * 测试非Spring管理的bean接口
+ * 实现类需要使用 @Extension 注解
+ *
+ * @author zhangzhuo
+ * @version 1.0
+ */
+public interface Hello extends ExtensionPoint {
+
+ String getName();
+
+}
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java
index 2e28b81e127ef9f67b40acb9f922eb470548d994..37fd5e1bedbe1552ccfca3a8ffb0f023fbcff272 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java
@@ -1,6 +1,7 @@
package com.basic.example.main.rest;
-import com.gitee.starblues.integration.PluginApplication;
+import com.basic.example.main.plugin.Hello;
+import com.gitee.starblues.integration.application.PluginApplication;
import com.gitee.starblues.integration.user.PluginUser;
import com.basic.example.main.plugin.ConsoleName;
import com.basic.example.main.plugin.ConsoleNameFactory;
@@ -101,6 +102,28 @@ public class HelloResource {
return getConsoleNames(stringBuffer, consoleNames);
}
+
+ /**
+ * 通过 插件id 获取指定的插件中的实现类
+ * 打印实现接口 com.basic.demo.main.main.plugin.ConsoleName 的实现类
+ * @return 返回所有实现 com.basic.demo.main.main.plugin.ConsoleName 接口的实现类的 name() 方法的输出
+ */
+ @GetMapping("/extensions")
+ public String hello(){
+
+ List hellos = pluginUser.getPluginExtensions(Hello.class);
+ if(hellos == null){
+ return "Not impl Hello";
+ } else {
+ StringBuffer stringBuffer = new StringBuffer("extensions impl :
");
+ for (Hello hello : hellos) {
+ stringBuffer.append(hello.getName())
+ .append("
");
+ }
+ return stringBuffer.toString();
+ }
+ }
+
/**
* 调用接口 name() 方法,并拼接输出
* @param stringBuffer stringBuffer
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/PluginResource.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/PluginResource.java
index bb54179c557fd847defaa937ae019c42c46fe01b..61a12206cae79e5f4aa5c12ac15a87aba67697a0 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/PluginResource.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/PluginResource.java
@@ -1,6 +1,6 @@
package com.basic.example.main.rest;
-import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
import com.gitee.starblues.integration.operator.PluginOperator;
import com.gitee.starblues.integration.operator.module.PluginInfo;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +27,6 @@ public class PluginResource {
public PluginResource(PluginApplication pluginApplication) {
this.pluginOperator = pluginApplication.getPluginOperator();
}
-
/**
* 获取插件信息
* @return 返回插件信息
@@ -60,8 +59,11 @@ public class PluginResource {
@PostMapping("/stop/{id}")
public String stop(@PathVariable("id") String id){
try {
- pluginOperator.stop(id);
- return "plugin '" + id +"' stop success";
+ if(pluginOperator.stop(id)){
+ return "plugin '" + id +"' stop success";
+ } else {
+ return "plugin '" + id +"' stop failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "plugin '" + id +"' stop failure. " + e.getMessage();
@@ -76,8 +78,11 @@ public class PluginResource {
@PostMapping("/start/{id}")
public String start(@PathVariable("id") String id){
try {
- pluginOperator.start(id);
- return "plugin '" + id +"' start success";
+ if(pluginOperator.start(id)){
+ return "plugin '" + id +"' start success";
+ } else {
+ return "plugin '" + id +"' start failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "plugin '" + id +"' start failure. " + e.getMessage();
@@ -93,8 +98,11 @@ public class PluginResource {
@PostMapping("/uninstall/{id}")
public String uninstall(@PathVariable("id") String id){
try {
- pluginOperator.uninstall(id);
- return "plugin '" + id +"' uninstall success";
+ if(pluginOperator.uninstall(id, true)){
+ return "plugin '" + id +"' uninstall success";
+ } else {
+ return "plugin '" + id +"' uninstall failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "plugin '" + id +"' uninstall failure. " + e.getMessage();
@@ -110,8 +118,11 @@ public class PluginResource {
@PostMapping("/installByPath")
public String install(@RequestParam("path") String path){
try {
- pluginOperator.install(Paths.get(path));
- return "installByPath success";
+ if(pluginOperator.install(Paths.get(path))){
+ return "installByPath success";
+ } else {
+ return "installByPath failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "installByPath failure : " + e.getMessage();
@@ -127,8 +138,11 @@ public class PluginResource {
@PostMapping("/uploadInstallPluginJar")
public String install(@RequestParam("jarFile") MultipartFile multipartFile){
try {
- pluginOperator.uploadPluginAndStart(multipartFile);
- return "install success";
+ if(pluginOperator.uploadPluginAndStart(multipartFile)){
+ return "install success";
+ } else {
+ return "install failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "install failure : " + e.getMessage();
@@ -136,24 +150,6 @@ public class PluginResource {
}
-
- /**
- * 备份插件。注意: 该操作只适用于生产环境
- * @param pluginId 插件id
- * @return 操作结果
- */
- @PostMapping("/back/{pluginId}")
- public String backupPlugin(@PathVariable("pluginId") String pluginId){
- try {
- pluginOperator.backupPlugin(pluginId, "testBack");
- return "backupPlugin success";
- } catch (Exception e) {
- e.printStackTrace();
- return "backupPlugin failure : " + e.getMessage();
- }
- }
-
-
/**
* 上传插件的配置文件。注意: 该操作只适用于生产环境
* @param multipartFile 上传文件 multipartFile
@@ -162,27 +158,34 @@ public class PluginResource {
@PostMapping("/uploadPluginConfigFile")
public String uploadConfig(@RequestParam("configFile") MultipartFile multipartFile){
try {
- pluginOperator.uploadConfigFile(multipartFile);
- return "uploadPluginConfigFile success";
+ if(pluginOperator.uploadConfigFile(multipartFile)){
+ return "uploadConfig success";
+ } else {
+ return "uploadConfig failure";
+ }
} catch (Exception e) {
e.printStackTrace();
- return "uploadPluginConfigFile failure : " + e.getMessage();
+ return "uploadConfig failure : " + e.getMessage();
}
}
+
/**
- * 通过路径安装配置文件。注意: 该操作只适用于生产环境
- * @param path 配置文件路径
+ * 备份插件。注意: 该操作只适用于生产环境
+ * @param pluginId 插件id
* @return 操作结果
*/
- @PostMapping("/installPluginConfig")
- public String installPluginConfig(@RequestParam("path") String path){
+ @PostMapping("/back/{pluginId}")
+ public String backupPlugin(@PathVariable("pluginId") String pluginId){
try {
- pluginOperator.installConfigFile(Paths.get(path));
- return "installPluginConfig success";
+ if(pluginOperator.backupPlugin(pluginId, "testBack")){
+ return "backupPlugin success";
+ } else {
+ return "backupPlugin failure";
+ }
} catch (Exception e) {
e.printStackTrace();
- return "installPluginConfig failure : " + e.getMessage();
+ return "backupPlugin failure : " + e.getMessage();
}
}
diff --git a/example/basic-example/basic-example-runner/pom.xml b/example/basic-example/basic-example-runner/pom.xml
index 51509a9c065d60e4566eea1796ee587dd94b8100..0ac04aa9077192ec678e4e0fbd8220456ed86e1b 100644
--- a/example/basic-example/basic-example-runner/pom.xml
+++ b/example/basic-example/basic-example-runner/pom.xml
@@ -14,7 +14,7 @@
com.gitee.starblues
basic-example-runner
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
diff --git a/example/basic-example/plugins/basic-example-plugin1/plugin.properties b/example/basic-example/plugins/basic-example-plugin1/plugin.properties
index d9ff7d8fa856bb0b5cc2377cf967358be8428155..5090ae723f3cd7ce3d5c4d51010cfe853f45db70 100644
--- a/example/basic-example/plugins/basic-example-plugin1/plugin.properties
+++ b/example/basic-example/plugins/basic-example-plugin1/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=basic-example-plugin1
plugin.class=com.basic.example.plugin1.DefinePlugin
-plugin.version=2.1.4-RELEASE
+plugin.version=2.2.0-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/basic-example/plugins/basic-example-plugin1/pom.xml b/example/basic-example/plugins/basic-example-plugin1/pom.xml
index 6343f5a9941aacd21ee2629715ec8b5efaea7fbb..b4c1ba2b72d350050cbe827013f003c0194ffced 100644
--- a/example/basic-example/plugins/basic-example-plugin1/pom.xml
+++ b/example/basic-example/plugins/basic-example-plugin1/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
basic-example-plugin-parent
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
../pom.xml
basic-example-plugin1
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
diff --git a/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/DefinePlugin.java b/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/DefinePlugin.java
index 4c45db835df9848434eca4b266760a9e5cf433e2..da0f380757daec5b0521f1de307a0d6829fa5a9e 100644
--- a/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/DefinePlugin.java
+++ b/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/DefinePlugin.java
@@ -1,7 +1,6 @@
package com.basic.example.plugin1;
import com.gitee.starblues.realize.BasePlugin;
-import org.pf4j.PluginException;
import org.pf4j.PluginWrapper;
/**
@@ -16,12 +15,12 @@ public class DefinePlugin extends BasePlugin {
}
@Override
- protected void startEvent() throws PluginException {
+ protected void startEvent() {
}
@Override
- protected void deleteEvent() throws PluginException {
+ protected void deleteEvent() {
}
diff --git a/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/service/HelloImp1.java b/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/service/HelloImp1.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee3213be1a78549fa679d77a43a3f25ee0be2257
--- /dev/null
+++ b/example/basic-example/plugins/basic-example-plugin1/src/main/java/com/basic/example/plugin1/service/HelloImp1.java
@@ -0,0 +1,16 @@
+package com.basic.example.plugin1.service;
+
+import com.basic.example.main.plugin.Hello;
+
+/**
+ * description
+ *
+ * @author zhangzhuo
+ * @version 1.0
+ */
+public class HelloImp1 implements Hello {
+ @Override
+ public String getName() {
+ return "my name is hello imp1 of plugin1";
+ }
+}
diff --git a/example/basic-example/plugins/basic-example-plugin2/plugin.properties b/example/basic-example/plugins/basic-example-plugin2/plugin.properties
index 96f2d22216fc662224d04cc36143b9a887c4e16e..43de2a715c92b0afa3fb1f1d8be3317599ddd154 100644
--- a/example/basic-example/plugins/basic-example-plugin2/plugin.properties
+++ b/example/basic-example/plugins/basic-example-plugin2/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=basic-example-plugin2
plugin.class=com.basic.example.plugin2.DefinePlugin
-plugin.version=2.1.4-RELEASE
+plugin.version=2.2.0-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/basic-example/plugins/basic-example-plugin2/pom.xml b/example/basic-example/plugins/basic-example-plugin2/pom.xml
index a109b8ee7bcffde8b5c6e22d8658f37a96b79edf..becb8e7e9d1731a02a372148cea66f89a0870b03 100644
--- a/example/basic-example/plugins/basic-example-plugin2/pom.xml
+++ b/example/basic-example/plugins/basic-example-plugin2/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
basic-example-plugin-parent
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
../pom.xml
basic-example-plugin2
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
diff --git a/example/basic-example/plugins/basic-example-plugin2/src/main/java/com/basic/example/plugin2/DefinePlugin.java b/example/basic-example/plugins/basic-example-plugin2/src/main/java/com/basic/example/plugin2/DefinePlugin.java
index 794445d6038a7e5355256b0f32bae2ab127b508d..98f258ba459ccd03ccf4c4f0c6cbc2166c16727d 100644
--- a/example/basic-example/plugins/basic-example-plugin2/src/main/java/com/basic/example/plugin2/DefinePlugin.java
+++ b/example/basic-example/plugins/basic-example-plugin2/src/main/java/com/basic/example/plugin2/DefinePlugin.java
@@ -1,7 +1,6 @@
package com.basic.example.plugin2;
import com.gitee.starblues.realize.BasePlugin;
-import org.pf4j.PluginException;
import org.pf4j.PluginWrapper;
/**
@@ -16,12 +15,12 @@ public class DefinePlugin extends BasePlugin {
}
@Override
- protected void startEvent() throws PluginException {
+ protected void startEvent() {
}
@Override
- protected void deleteEvent() throws PluginException {
+ protected void deleteEvent() {
}
diff --git a/example/basic-example/plugins/pom.xml b/example/basic-example/plugins/pom.xml
index 8b8e99ac414a29c4ebabaa236cd4c3e16383e198..25320c5082893decefd48e7f0cc4845445ba099e 100644
--- a/example/basic-example/plugins/pom.xml
+++ b/example/basic-example/plugins/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
basic-example-plugin-parent
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
diff --git a/example/basic-example/pom.xml b/example/basic-example/pom.xml
index 07a3308b50ed65b8f073a50ede5eb1ed5133102a..7dfaf47f12e4505a38bd7024c9a3d480bf8ff010 100644
--- a/example/basic-example/pom.xml
+++ b/example/basic-example/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
basic-example
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
基本案例
diff --git a/example/integration-mybatis/integration-mybatis-main/pom.xml b/example/integration-mybatis/integration-mybatis-main/pom.xml
index 695dae300d91cd7fe5744f80a1f4405e01e03285..1c62e7d25264886fc81479d393de4aadeb07a64c 100644
--- a/example/integration-mybatis/integration-mybatis-main/pom.xml
+++ b/example/integration-mybatis/integration-mybatis-main/pom.xml
@@ -8,19 +8,19 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.3.RELEASE
+ 2.1.1.RELEASE
com.gitee.starblues
integration-mybatis-main
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
主程序模块
- 2.1.4-RELEASE
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
+ 2.2.0-RELEASE
2.0.1
2.7.0
1.6
@@ -85,7 +85,6 @@
${swagger-bootstrap-ui.version}
-
org.springframework.boot
spring-boot-starter-test
@@ -102,6 +101,8 @@
spring-boot-maven-plugin
+
+ repackage
repackage
diff --git a/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginBeanConfig.java b/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginBeanConfig.java
index 2acb949abb78123b4d418c721e2ccbf176d22f29..853f2ec51bd4504f7aa8a68b979a42e4af759736 100644
--- a/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginBeanConfig.java
+++ b/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginBeanConfig.java
@@ -2,12 +2,13 @@ package com.mybatis.main.config;
import com.gitee.starblues.extension.mybatis.SpringBootMybatisExtension;
import com.gitee.starblues.integration.*;
-import com.gitee.starblues.integration.initialize.AutoPluginInitializer;
-import com.gitee.starblues.integration.initialize.PluginInitializer;
-import org.pf4j.PluginException;
-import org.pf4j.PluginManager;
+import com.gitee.starblues.integration.application.AutoPluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
+import org.pf4j.RuntimeMode;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
/**
* @Description: 插件集成配置
@@ -17,42 +18,67 @@ import org.springframework.context.annotation.Configuration;
* @Update Date Time:
* @see
*/
-@Configuration
+@Component
+@ConfigurationProperties(prefix = "plugin")
public class PluginBeanConfig {
/**
- * 通过默认的集成工厂返回 PluginManager
- * @param integrationConfiguration 集成的配置文件
- * @return
- * @throws PluginException
+ * 运行模式
+ * 开发环境: development、dev
+ * 生产/部署 环境: deployment、prod
*/
- @Bean
- public PluginManager pluginManager(IntegrationConfiguration integrationConfiguration) throws PluginException {
- IntegrationFactory integrationFactory = new DefaultIntegrationFactory();
- return integrationFactory.getPluginManager(integrationConfiguration);
- }
+ @Value("${runMode:dev}")
+ private String runMode;
+
+ /**
+ * 插件的路径
+ */
+ @Value("${pluginPath:plugins}")
+ private String pluginPath;
/**
- * 定义默认的插件应用。使用可以注入它操作插件。
- * @return
+ * 插件文件的路径
*/
+ @Value("${pluginConfigFilePath:pluginConfigs}")
+ private String pluginConfigFilePath;
+
+
+
@Bean
- public PluginApplication pluginApplication(){
- DefaultPluginApplication defaultPluginApplication = new DefaultPluginApplication();
- defaultPluginApplication.addExtension(new SpringBootMybatisExtension());
- return defaultPluginApplication;
+ public IntegrationConfiguration configuration(){
+ return ConfigurationBuilder.toBuilder()
+ .runtimeMode(RuntimeMode.byName(runMode))
+ .pluginPath(pluginPath)
+ .pluginConfigFilePath(pluginConfigFilePath)
+ .uploadTempPath("temp")
+ .backupPath("backupPlugin")
+ .pluginRestControllerPathPrefix("/api/plugin")
+ .enablePluginIdRestControllerPathPrefix(true)
+ .build();
}
+
/**
- * 初始化插件。此处定义可以在系统启动时自动加载插件。
- * 如果想手动加载插件, 则可以使用 com.plugin.development.integration.initialize.ManualPluginInitializer 来初始化插件。
- * @param pluginApplication
- * @return
+ * 定义插件应用。使用可以注入它操作插件。
+ * @return PluginApplication
*/
@Bean
- public PluginInitializer pluginInitializer(PluginApplication pluginApplication){
- AutoPluginInitializer autoPluginInitializer = new AutoPluginInitializer(pluginApplication);
- return autoPluginInitializer;
+ public PluginApplication pluginApplication(){
+ // 实例化自动初始化插件的PluginApplication
+ PluginApplication pluginApplication = new AutoPluginApplication();
+ pluginApplication.addExtension(new SpringBootMybatisExtension());
+ return pluginApplication;
+ }
+
+ public void setRunMode(String runMode) {
+ this.runMode = runMode;
+ }
+
+ public void setPluginPath(String pluginPath) {
+ this.pluginPath = pluginPath;
}
+ public void setPluginConfigFilePath(String pluginConfigFilePath) {
+ this.pluginConfigFilePath = pluginConfigFilePath;
+ }
}
diff --git a/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginConfiguration.java b/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginConfiguration.java
deleted file mode 100644
index b6442d3e6baceecd1369879e11b55368dc069a66..0000000000000000000000000000000000000000
--- a/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/config/PluginConfiguration.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.mybatis.main.config;
-
-import com.gitee.starblues.integration.DefaultIntegrationConfiguration;
-import org.pf4j.RuntimeMode;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-
-/**
- * @Description:
- * @Author: zhangzhuo
- * @Version: 1.0
- * @Create Date Time: 2019-05-25 12:36
- * @Update Date Time:
- * @see
- */
-@Component
-@ConfigurationProperties(prefix = "plugin")
-public class PluginConfiguration extends DefaultIntegrationConfiguration {
-
- /**
- * 运行模式
- * 开发环境: development、dev
- * 生产/部署 环境: deployment、prod
- */
- @Value("${runMode:dev}")
- private String runMode;
-
- /**
- * 插件的路径
- */
- @Value("${pluginPath:plugins}")
- private String pluginPath;
-
- /**
- * 插件文件的路径
- */
- @Value("${pluginConfigFilePath:pluginConfigs}")
- private String pluginConfigFilePath;
-
-
- @Override
- public RuntimeMode environment() {
- return RuntimeMode.byName(runMode);
- }
-
- @Override
- public String pluginPath() {
- return pluginPath;
- }
-
- @Override
- public String pluginConfigFilePath() {
- return pluginConfigFilePath;
- }
-
- /**
- * 重写上传插件包的临时存储路径。只适用于生产环境
- * @return String
- */
- @Override
- public String uploadTempPath() {
- return "temp";
- }
-
- /**
- * 重写插件备份路径。只适用于生产环境
- * @return String
- */
- @Override
- public String backupPath() {
- return "backupPlugin";
- }
-
- /**
- * 重写插件RestController请求的路径前缀
- * @return String
- */
- @Override
- public String pluginRestControllerPathPrefix() {
- return "/api/plugin";
- }
-
- /**
- * 重写是否启用插件id作为RestController请求的路径前缀。
- * 启动则插件id会作为二级路径前缀。即: /api/plugin/pluginId/**
- * @return String
- */
- @Override
- public boolean enablePluginIdRestControllerPathPrefix() {
- return true;
- }
-
- public String getRunMode() {
- return runMode;
- }
-
- public void setRunMode(String runMode) {
- this.runMode = runMode;
- }
-
-
- public String getPluginPath() {
- return pluginPath;
- }
-
- public void setPluginPath(String pluginPath) {
- this.pluginPath = pluginPath;
- }
-
- public String getPluginConfigFilePath() {
- return pluginConfigFilePath;
- }
-
- public void setPluginConfigFilePath(String pluginConfigFilePath) {
- this.pluginConfigFilePath = pluginConfigFilePath;
- }
-
- @Override
- public String toString() {
- return "PluginArgConfiguration{" +
- "runMode='" + runMode + '\'' +
- ", pluginPath='" + pluginPath + '\'' +
- ", pluginConfigFilePath='" + pluginConfigFilePath + '\'' +
- '}';
- }
-}
diff --git a/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/rest/PluginResource.java b/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/rest/PluginResource.java
index 917e33b7e1602db878046c457495fa781a745882..7b4e3f676c3fd8e2ca3556c6c68d08d1b38d1f6f 100644
--- a/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/rest/PluginResource.java
+++ b/example/integration-mybatis/integration-mybatis-main/src/main/java/com/mybatis/main/rest/PluginResource.java
@@ -1,10 +1,9 @@
package com.mybatis.main.rest;
-import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
import com.gitee.starblues.integration.operator.PluginOperator;
import com.gitee.starblues.integration.operator.module.PluginInfo;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -61,8 +60,11 @@ public class PluginResource {
@PostMapping("/stop/{id}")
public String stop(@PathVariable("id") String id){
try {
- pluginOperator.stop(id);
- return "plugin '" + id +"' stop success";
+ if(pluginOperator.stop(id)){
+ return "plugin '" + id +"' stop success";
+ } else {
+ return "plugin '" + id +"' stop failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "plugin '" + id +"' stop failure. " + e.getMessage();
@@ -77,8 +79,11 @@ public class PluginResource {
@PostMapping("/start/{id}")
public String start(@PathVariable("id") String id){
try {
- pluginOperator.start(id);
- return "plugin '" + id +"' start success";
+ if(pluginOperator.start(id)){
+ return "plugin '" + id +"' start success";
+ } else {
+ return "plugin '" + id +"' start failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "plugin '" + id +"' start failure. " + e.getMessage();
@@ -94,8 +99,11 @@ public class PluginResource {
@PostMapping("/uninstall/{id}")
public String uninstall(@PathVariable("id") String id){
try {
- pluginOperator.uninstall(id);
- return "plugin '" + id +"' uninstall success";
+ if(pluginOperator.uninstall(id, true)){
+ return "plugin '" + id +"' uninstall success";
+ } else {
+ return "plugin '" + id +"' uninstall failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "plugin '" + id +"' uninstall failure. " + e.getMessage();
@@ -111,8 +119,11 @@ public class PluginResource {
@PostMapping("/installByPath")
public String install(@RequestParam("path") String path){
try {
- pluginOperator.install(Paths.get(path));
- return "installByPath success";
+ if(pluginOperator.install(Paths.get(path))){
+ return "installByPath success";
+ } else {
+ return "installByPath failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "installByPath failure : " + e.getMessage();
@@ -128,8 +139,11 @@ public class PluginResource {
@PostMapping("/uploadInstallPluginJar")
public String install(@RequestParam("jarFile") MultipartFile multipartFile){
try {
- pluginOperator.uploadPluginAndStart(multipartFile);
- return "install success";
+ if(pluginOperator.uploadPluginAndStart(multipartFile)){
+ return "install success";
+ } else {
+ return "install failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "install failure : " + e.getMessage();
@@ -145,8 +159,11 @@ public class PluginResource {
@PostMapping("/uploadPluginConfigFile")
public String uploadConfig(@RequestParam("configFile") MultipartFile multipartFile){
try {
- pluginOperator.uploadConfigFile(multipartFile);
- return "uploadConfig success";
+ if(pluginOperator.uploadConfigFile(multipartFile)){
+ return "uploadConfig success";
+ } else {
+ return "uploadConfig failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "uploadConfig failure : " + e.getMessage();
@@ -162,8 +179,11 @@ public class PluginResource {
@PostMapping("/back/{pluginId}")
public String backupPlugin(@PathVariable("pluginId") String pluginId){
try {
- pluginOperator.backupPlugin(pluginId, "testBack");
- return "backupPlugin success";
+ if(pluginOperator.backupPlugin(pluginId, "testBack")){
+ return "backupPlugin success";
+ } else {
+ return "backupPlugin failure";
+ }
} catch (Exception e) {
e.printStackTrace();
return "backupPlugin failure : " + e.getMessage();
diff --git a/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-dev.yml b/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-dev.yml
index c4d75050be2ce6caeafa72ef920a7eee70d1a2ab..df5d62b644b490b9cb9475e56a22826d561b25e1 100644
--- a/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-dev.yml
+++ b/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-dev.yml
@@ -3,7 +3,7 @@ server:
spring:
datasource:
- url: jdbc:mysql://127.0.0.1:3306/plugin?useUnicode=true&useSSL=false&characterEncoding=utf8
+ url: jdbc:mysql://127.0.0.1:3306/plugin?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
diff --git a/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-prod.yml b/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-prod.yml
index eafc8bb1b2477fd4f00f55d640b1b1974f30f234..45b1f6e91655d17002fd2b0b2ed7de008d749b4f 100644
--- a/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-prod.yml
+++ b/example/integration-mybatis/integration-mybatis-main/src/main/resources/application-prod.yml
@@ -3,7 +3,7 @@ server:
spring:
datasource:
- url: jdbc:mysql://127.0.0.1:3306/plugin?useUnicode=true&useSSL=false&characterEncoding=utf8
+ url: jdbc:mysql://127.0.0.1:3306/plugin?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
diff --git a/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml b/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml
index d15419e9c2cd802816f3e0f7d191d34cfb439675..a8bceb67969f87b6a7eaf471bc56ded3a909b19e 100644
--- a/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml
+++ b/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
integration-mybatis-plugin-parent
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
diff --git a/example/integration-mybatis/integration-mybatis-runner/pom.xml b/example/integration-mybatis/integration-mybatis-runner/pom.xml
index 2f6131ab96d24e658f34ce11c1a5a70d7e3d9a07..66423b69d84adf7b0cfc073d3bcbd9efc9d615cc 100644
--- a/example/integration-mybatis/integration-mybatis-runner/pom.xml
+++ b/example/integration-mybatis/integration-mybatis-runner/pom.xml
@@ -14,7 +14,7 @@
com.gitee.starblues
integration-mybatis-runner
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
启动程序模块。将启动类配置到该模块下
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties b/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties
index 99109b79d17592d0a4a7138021079b3db59519a7..c909a8dd37df247a60641c0bb1ce4cfd90fa282f 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=integration-mybatis-plugin1
plugin.class=com.mybatis.plugin1.ExamplePlugin1
-plugin.version=2.1.4-RELEASE
+plugin.version=2.2.0-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml b/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml
index af20f000186bd564d03b7d76e3f8c0b10c3036ac..a4bf654fb73687039674675556b9abf94cc97a2e 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
integration-mybatis-plugin-parent
- 2.1.4-RELEASE
- ../../integration-mybatis-plugin-parent
+ 2.2.0-RELEASE
+ ../../integration-mybatis-plugin-parent/pom.xml
integration-mybatis-plugin1
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/ExamplePlugin1.java b/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/ExamplePlugin1.java
index 3e65cf4531383815f00815632022bce19e18ce38..d5416439dd65d8b38e7e5043c8be0c6a845cc4ab 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/ExamplePlugin1.java
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/ExamplePlugin1.java
@@ -2,7 +2,6 @@ package com.mybatis.plugin1;
import com.gitee.starblues.extension.mybatis.configuration.SpringBootMybatisConfig;
import com.gitee.starblues.realize.BasePlugin;
-import org.pf4j.PluginException;
import org.pf4j.PluginWrapper;
import java.util.HashSet;
@@ -25,12 +24,12 @@ public class ExamplePlugin1 extends BasePlugin implements SpringBootMybatisConfi
}
@Override
- protected void startEvent() throws PluginException {
+ protected void startEvent() {
}
@Override
- protected void deleteEvent() throws PluginException {
+ protected void deleteEvent() {
}
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties b/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties
index f65a59d2c73bb5546e20c25df84c3ca212ef8d36..e1aa8308750a8d431f77601518aa3e919f4a8f47 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=integration-mybatis-plugin2
plugin.class=com.mybatis.plugin2.ExamplePlugin2
-plugin.version=2.1.4-RELEASE
+plugin.version=2.2.0-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml b/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml
index dd08cc324cf4192fe417a424b730e90728727ba0..9389e189ad30836e06df7222c708fee17831b1fc 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
integration-mybatis-plugin-parent
- 2.1.4-RELEASE
- ../../integration-mybatis-plugin-parent
+ 2.2.0-RELEASE
+ ../../integration-mybatis-plugin-parent/pom.xml
integration-mybatis-plugin2
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/ExamplePlugin2.java b/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/ExamplePlugin2.java
index b1faef581d6f427937fd0938a4ec745dce3ad9c5..da637499bfe9504e8c00136c683f766f7c477a40 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/ExamplePlugin2.java
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/ExamplePlugin2.java
@@ -2,7 +2,6 @@ package com.mybatis.plugin2;
import com.gitee.starblues.extension.mybatis.configuration.SpringBootMybatisConfig;
import com.gitee.starblues.realize.BasePlugin;
-import org.pf4j.PluginException;
import org.pf4j.PluginWrapper;
import java.util.HashSet;
@@ -25,12 +24,12 @@ public class ExamplePlugin2 extends BasePlugin implements SpringBootMybatisConfi
}
@Override
- protected void startEvent() throws PluginException {
+ protected void startEvent() {
}
@Override
- protected void deleteEvent() throws PluginException {
+ protected void deleteEvent() {
}
diff --git a/example/integration-mybatis/pom.xml b/example/integration-mybatis/pom.xml
index 606631d8c4c84eee52af66ef88b98f1394bdd216..3f80dab3fbbdfe824cf7f215527ad289f78f51e0 100644
--- a/example/integration-mybatis/pom.xml
+++ b/example/integration-mybatis/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
integration-mybatis
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
集成mybatis案例
diff --git a/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml b/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml
index ab420400b00088a2d7648e5d81c1625bfe959668..a9f100ece132af80a2d8ede493fab84f0e4af884 100644
--- a/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml
+++ b/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml
@@ -13,7 +13,7 @@
com.gitee.starblues
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
integration-mybatisplus-main
jar
集成mybatis-plus 案例--主程序
@@ -27,8 +27,8 @@
2.0.1
3.2.0
- 2.1.4-RELEASE
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
+ 2.2.0-RELEASE
2.7.0
1.6
diff --git a/example/integration-mybatisplus/integration-mybatisplus-main/src/main/java/com/mybatisplus/main/config/PluginBeanConfig.java b/example/integration-mybatisplus/integration-mybatisplus-main/src/main/java/com/mybatisplus/main/config/PluginBeanConfig.java
index 735e5488036544dea38b8c152d57313ba743b9ab..93c14a095ed6e5ac016def922114d241e97cf247 100644
--- a/example/integration-mybatisplus/integration-mybatisplus-main/src/main/java/com/mybatisplus/main/config/PluginBeanConfig.java
+++ b/example/integration-mybatisplus/integration-mybatisplus-main/src/main/java/com/mybatisplus/main/config/PluginBeanConfig.java
@@ -1,11 +1,8 @@
package com.mybatisplus.main.config;
import com.gitee.starblues.extension.mybatis.SpringBootMybatisExtension;
-import com.gitee.starblues.integration.*;
-import com.gitee.starblues.integration.initialize.AutoPluginInitializer;
-import com.gitee.starblues.integration.initialize.PluginInitializer;
-import org.pf4j.PluginException;
-import org.pf4j.PluginManager;
+import com.gitee.starblues.integration.application.PluginApplication;
+import com.gitee.starblues.integration.application.AutoPluginApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -20,39 +17,17 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class PluginBeanConfig {
- /**
- * 通过默认的集成工厂返回 PluginManager
- * @param integrationConfiguration 集成的配置文件
- * @return
- * @throws PluginException
- */
- @Bean
- public PluginManager pluginManager(IntegrationConfiguration integrationConfiguration) throws PluginException {
- IntegrationFactory integrationFactory = new DefaultIntegrationFactory();
- return integrationFactory.getPluginManager(integrationConfiguration);
- }
/**
- * 定义默认的插件应用。使用可以注入它操作插件。
- * @return
+ * 定义插件应用。使用可以注入它操作插件。
+ * @return PluginApplication
*/
@Bean
public PluginApplication pluginApplication(){
- DefaultPluginApplication defaultPluginApplication = new DefaultPluginApplication();
- defaultPluginApplication.addExtension(new SpringBootMybatisExtension());
- return defaultPluginApplication;
- }
-
- /**
- * 初始化插件。此处定义可以在系统启动时自动加载插件。
- * 如果想手动加载插件, 则可以使用 com.plugin.development.integration.initialize.ManualPluginInitializer 来初始化插件。
- * @param pluginApplication
- * @return
- */
- @Bean
- public PluginInitializer pluginInitializer(PluginApplication pluginApplication){
- AutoPluginInitializer autoPluginInitializer = new AutoPluginInitializer(pluginApplication);
- return autoPluginInitializer;
+ // 实例化自动初始化插件的PluginApplication
+ PluginApplication pluginApplication = new AutoPluginApplication();
+ pluginApplication.addExtension(new SpringBootMybatisExtension());
+ return pluginApplication;
}
}
diff --git a/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-dev.yml b/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-dev.yml
index fb86076c138bf8da94ea42cdba02fe67f89a054e..25c6248b196a6e609ae198f3b01c935357052f27 100644
--- a/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-dev.yml
+++ b/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-dev.yml
@@ -3,7 +3,7 @@ server:
spring:
datasource:
- url: jdbc:mysql://127.0.0.1:3306/plugin_mybatis_plus?useUnicode=true&useSSL=false&characterEncoding=utf8
+ url: jdbc:mysql://127.0.0.1:3306/plugin_mybatis_plus?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
diff --git a/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-prod.yml b/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-prod.yml
index fb9583f2adc9790f7f74058723d9e75462510e6c..421c48b6527dc39976fa73b299443bfd09499ec6 100644
--- a/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-prod.yml
+++ b/example/integration-mybatisplus/integration-mybatisplus-main/src/main/resources/application-prod.yml
@@ -3,7 +3,7 @@ server:
spring:
datasource:
- url: jdbc:mysql://127.0.0.1:3306/plugin_mybatis_plus?useUnicode=true&useSSL=false&characterEncoding=utf8
+ url: jdbc:mysql://127.0.0.1:3306/plugin_mybatis_plus?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
diff --git a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties
index 61c686280b883184ac6b9c8b224b40a3f2dca7f5..3c62bc0251f8f7ffbf411efc168a5b35b387a2d8 100644
--- a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties
+++ b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=integration-mybatisplus-plugin
plugin.class=com.mybatisplus.plugin.MybatisPlusPlugin
-plugin.version=2.1.4-RELEASE
+plugin.version=2.2.0-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml
index ff0e50c1c9d349e8868ca500d735be02fb47b336..1eeb886aaae6765b3854e009c0f348dd31b5fedf 100644
--- a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml
+++ b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
integration-mybatisplus-plugin
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
jar
diff --git a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/src/main/java/com/mybatisplus/plugin/MybatisPlusPlugin.java b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/src/main/java/com/mybatisplus/plugin/MybatisPlusPlugin.java
index 4909709e1b30d7ddb5ca05ff3e792fda0caa5a11..dc8bb4084001801cb65d73a8ce7e776a672dcfd6 100644
--- a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/src/main/java/com/mybatisplus/plugin/MybatisPlusPlugin.java
+++ b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/src/main/java/com/mybatisplus/plugin/MybatisPlusPlugin.java
@@ -2,7 +2,6 @@ package com.mybatisplus.plugin;
import com.gitee.starblues.extension.mybatis.configuration.SpringBootMybatisConfig;
import com.gitee.starblues.realize.BasePlugin;
-import org.pf4j.PluginException;
import org.pf4j.PluginWrapper;
import java.util.HashSet;
@@ -25,12 +24,12 @@ public class MybatisPlusPlugin extends BasePlugin implements SpringBootMybatisCo
}
@Override
- protected void startEvent() throws PluginException {
+ protected void startEvent() {
}
@Override
- protected void deleteEvent() throws PluginException {
+ protected void deleteEvent() {
}
diff --git a/example/integration-mybatisplus/pom.xml b/example/integration-mybatisplus/pom.xml
index 7f7bcc30b16a2cfde478e1d71ec9eed460c7abe1..cc45b57c0f1299daf245bdd9759563d7fd6255a5 100644
--- a/example/integration-mybatisplus/pom.xml
+++ b/example/integration-mybatisplus/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
integration-mybatisplus
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
集成mybatis-plus案例
diff --git a/example/pom.xml b/example/pom.xml
index 42b8d7ed03fd036d3d5065255a9035b64e793905..d2fdd980f7c3b39c76e57be370e10e6c05a404d7 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
springboot-plugin-framework-example
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
pom
diff --git a/pom.xml b/pom.xml
index 1770ff02d98acc99bfc5adeb0b702031f74147d8..a279886db80ffd8005913028280adc9f576f14cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
springboot-plugin-framework-parent
pom
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
spring boot 插件开发集成包
diff --git a/springboot-plugin-framework-extension/pom.xml b/springboot-plugin-framework-extension/pom.xml
index 07c05d40be6b934bbb16f9df525354b7af137db2..898bede3a15a29abe2a1ea4d3c8830d07cb626d3 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.1.4-RELEASE
+ 2.2.0-RELEASE
spring boot 插件式开发集成包--扩展模块
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 0536374e5aa5444f1e92cfa027971e8c0121b5a0..064ddadecf36ff7268f1cf248d6a04a5b2753985 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.1.4-RELEASE
+ 2.2.0-RELEASE
jar
插件扩展-spring boot mybatis 集成扩展
@@ -64,7 +64,7 @@
3.1.0
1.6
- 2.1.4-RELEASE
+ 2.2.0-RELEASE
2.0.1
3.2.0
diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlLoader.java b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlLoader.java
index 53978edef0c5aeea9e76b1a0b678c8fe30189aab..ba805ff2feebb16c7e83249e2290b9fbe3b30ea3 100644
--- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlLoader.java
+++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlLoader.java
@@ -2,6 +2,7 @@ package com.gitee.starblues.extension.mybatis;
import com.gitee.starblues.extension.mybatis.configuration.SpringBootMybatisConfig;
import com.gitee.starblues.loader.PluginResourceLoader;
+import com.gitee.starblues.loader.ResourceWrapper;
import com.gitee.starblues.realize.BasePlugin;
import com.gitee.starblues.utils.OrderExecution;
import com.gitee.starblues.utils.OrderPriority;
@@ -19,7 +20,7 @@ import java.util.*;
* 定制插件 Mybatis xml 加载者
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class PluginMybatisXmlLoader implements PluginResourceLoader {
@@ -42,7 +43,7 @@ public class PluginMybatisXmlLoader implements PluginResourceLoader {
}
@Override
- public List load(BasePlugin basePlugin) throws Exception {
+ public ResourceWrapper load(BasePlugin basePlugin) throws Exception {
if(!(basePlugin instanceof SpringBootMybatisConfig)){
LOG.warn("Plugin <{}> not implements SpringBootMybatisConfig, If you need to use mybatis in the plugin," +
"Please implements SpringBootMybatisConfig interface", basePlugin.getClass().getName());
@@ -53,7 +54,7 @@ public class PluginMybatisXmlLoader implements PluginResourceLoader {
if(mybatisMapperXmlLocationsMatch == null || mybatisMapperXmlLocationsMatch.isEmpty()){
LOG.warn("SpringBootMybatisConfig -> mybatisMapperXmlLocationsMatch return is empty, " +
"Please check configuration");
- return Collections.emptyList();
+ return new ResourceWrapper();
}
ResourcePatternResolver resourcePatternResolver =
new PathMatchingResourcePatternResolver(basePlugin.getWrapper().getPluginClassLoader());
@@ -67,7 +68,12 @@ public class PluginMybatisXmlLoader implements PluginResourceLoader {
resources.addAll(loadResources);
}
}
- return resources;
+ return new ResourceWrapper(resources);
+ }
+
+ @Override
+ public void unload(BasePlugin basePlugin, ResourceWrapper resourceWrapper) throws Exception {
+ //
}
@Override
diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlProcessor.java b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlProcessor.java
index 0bd61100fca77bd8db9b120ca17842a9b50d8383..f6b237e45c995aaf5f49a72588a600425f0dad11 100644
--- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlProcessor.java
+++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisXmlProcessor.java
@@ -1,6 +1,7 @@
package com.gitee.starblues.extension.mybatis;
import com.gitee.starblues.extension.mybatis.utils.MybatisXmlProcess;
+import com.gitee.starblues.loader.ResourceWrapper;
import com.gitee.starblues.realize.BasePlugin;
import com.gitee.starblues.factory.PluginRegistryInfo;
import com.gitee.starblues.factory.process.pipe.PluginPipeProcessorExtend;
@@ -16,7 +17,7 @@ import java.util.List;
* mybatis xml 处理者
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class PluginMybatisXmlProcessor implements PluginPipeProcessorExtend {
@@ -48,15 +49,16 @@ public class PluginMybatisXmlProcessor implements PluginPipeProcessorExtend {
}
BasePlugin basePlugin = pluginRegistryInfo.getBasePlugin();
PluginWrapper pluginWrapper = pluginRegistryInfo.getPluginWrapper();
- List pluginResources =
+ ResourceWrapper resourceWrapper =
basePlugin.getPluginResourceLoadFactory().getPluginResources(PluginMybatisXmlLoader.KEY);
- if(pluginResources == null || pluginResources.isEmpty()){
+ if(resourceWrapper == null){
return;
}
- boolean change = mybatisXmlProcess.isChange(pluginResources);
- if(change){
- mybatisXmlProcess.loadXmlResource(pluginResources, pluginWrapper.getPluginClassLoader());
+ List pluginResources = resourceWrapper.getResources();
+ if(pluginResources == null || pluginResources.isEmpty()){
+ return;
}
+ mybatisXmlProcess.loadXmlResource(pluginResources, pluginWrapper.getPluginClassLoader());
}
@Override
diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/utils/MybatisXmlProcess.java b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/utils/MybatisXmlProcess.java
index 7fc96fd0469f190f74d886f69318c78c782a8129..5ed326506bc1070264c4254712a2a1765b19b40e 100644
--- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/utils/MybatisXmlProcess.java
+++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/utils/MybatisXmlProcess.java
@@ -7,6 +7,7 @@ import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.core.io.Resource;
import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
@@ -18,7 +19,7 @@ import java.util.concurrent.ConcurrentHashMap;
* mybatis xml 操作者
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class MybatisXmlProcess {
@@ -62,17 +63,25 @@ public class MybatisXmlProcess {
return;
}
Configuration configuration = factory.getConfiguration();
- //removeConfig(configuration);
+ // removeConfig(configuration);
ClassLoader defaultClassLoader = Resources.getDefaultClassLoader();
try {
Resources.setDefaultClassLoader(pluginClassLoader);
for (Resource resource :resources) {
- PluginMybatisXmlMapperBuilder xmlMapperBuilder = new PluginMybatisXmlMapperBuilder(
- resource.getInputStream(),
- configuration, resource.toString(),
- configuration.getSqlFragments(),
- pluginClassLoader);
- xmlMapperBuilder.parse();
+ InputStream inputStream = resource.getInputStream();
+ try {
+ PluginMybatisXmlMapperBuilder xmlMapperBuilder = new PluginMybatisXmlMapperBuilder(
+ inputStream,
+ configuration, resource.toString(),
+ configuration.getSqlFragments(),
+ pluginClassLoader);
+ xmlMapperBuilder.parse();
+ } finally {
+ if(inputStream != null){
+ inputStream.close();
+ }
+ }
+
}
} finally {
ErrorContext.instance().reset();
@@ -86,6 +95,7 @@ public class MybatisXmlProcess {
* @return boolean
* @throws IOException IOException
*/
+ @Deprecated
public boolean isChange(List resources) throws IOException {
if(resources == null || resources.isEmpty()){
return false;
diff --git a/springboot-plugin-framework/pom.xml b/springboot-plugin-framework/pom.xml
index 1de711cdad556e9b5cd80e8cf536f61cb721427e..925111a28dd940d7e2e7b1a4dab5ad69ec050afe 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.1.4-RELEASE
+ 2.2.0-RELEASE
spring boot 插件式开发集成包
@@ -64,8 +64,7 @@
3.1.0
1.6
- 2.6.0
- 2.0.0
+ 3.1.0
5.1.7.RELEASE
2.9.9
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java
index 404cd5668194d2ae1f381dcb239e6dac7a891262..af1bb3ed52466c2005f4c99127907361a4f1e345 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java
@@ -55,6 +55,7 @@ public class PluginInfoContainer {
* 是否存在bean名称
* @param pluginId 插件id
* @param beanName 注册的bean名称
+ * @return true 存在。false不存在
*/
public static synchronized boolean existRegisterBeanName(String pluginId, String beanName){
Set beanNames = springRegisterBeanNames.get(pluginId);
@@ -68,6 +69,7 @@ public class PluginInfoContainer {
/**
* 是否存在bean名称
* @param beanName 注册的bean名称
+ * @return true 存在。false不存在
*/
public static synchronized boolean existRegisterBeanName(String beanName){
for (Set beanNames : springRegisterBeanNames.values()){
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginRegistryInfo.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginRegistryInfo.java
index 9e150d4d9a4b0091998837c581042f560688f68e..23ecdd1cea808045bd05dec4d91aa114655e4dcf 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginRegistryInfo.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginRegistryInfo.java
@@ -50,22 +50,38 @@ public class PluginRegistryInfo {
return basePlugin;
}
+ /**
+ * 添加类到类集合容器
+ * @param aClass 类
+ */
public void addClasses(Class> aClass){
if(aClass != null){
classes.add(aClass);
}
}
+ /**
+ * 清除类集合容器
+ */
public void cleanClasses(){
classes.clear();
}
+ /**
+ * 得到类集合容器
+ * @return 类集合容器
+ */
public List> getClasses(){
List> result = new ArrayList<>();
result.addAll(classes);
return result;
}
+ /**
+ * 添加分组的类型
+ * @param key 分组key
+ * @param aClass 类
+ */
public void addGroupClasses(String key, Class> aClass){
List> classes = groupClasses.get(key);
if(classes == null){
@@ -75,6 +91,11 @@ public class PluginRegistryInfo {
classes.add(aClass);
}
+ /**
+ * 通过分组key得到分组中的类类型
+ * @param key 处理者key
+ * @return 类类型集合
+ */
public List> getGroupClasses(String key){
List> classes = groupClasses.get(key);
List> result = new ArrayList<>();
@@ -87,6 +108,7 @@ public class PluginRegistryInfo {
/**
* 得到插件bean注册者信息
* @param key 扩展的key
+ * @param 处理者类型
* @return 注册者信息
*/
public T getProcessorInfo(String key){
@@ -134,5 +156,4 @@ public class PluginRegistryInfo {
-
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/configuration/AbstractConfigurationParser.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/configuration/AbstractConfigurationParser.java
index 3634ebb2b08c42290733a52a9be601f4e8c81adf..c82c8fa973920278bdbc74be10355a5fb5c65a7a 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/configuration/AbstractConfigurationParser.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/configuration/AbstractConfigurationParser.java
@@ -2,6 +2,7 @@ package com.gitee.starblues.factory.process.pipe.bean.configuration;
import com.gitee.starblues.integration.IntegrationConfiguration;
import com.gitee.starblues.loader.PluginResourceLoader;
+import com.gitee.starblues.loader.ResourceWrapper;
import com.gitee.starblues.loader.load.PluginConfigFileLoader;
import com.gitee.starblues.realize.BasePlugin;
import org.springframework.core.io.Resource;
@@ -41,7 +42,11 @@ public abstract class AbstractConfigurationParser implements ConfigurationParser
fileName,
configuration.environment()
);
- List resources = pluginResourceLoader.load(basePlugin);
+ ResourceWrapper resourceWrapper = pluginResourceLoader.load(basePlugin);
+ if(resourceWrapper == null){
+ return null;
+ }
+ List resources = resourceWrapper.getResources();
if(resources.isEmpty() || resources.size() != 1){
return null;
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/classs/PluginClassProcess.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/classs/PluginClassProcess.java
index 45c2215346063423e6bab5b166af47378519f90a..ae2774ca91289d1b37760c439980af2c379df13a 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/classs/PluginClassProcess.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/classs/PluginClassProcess.java
@@ -5,6 +5,7 @@ import com.gitee.starblues.factory.PluginRegistryInfo;
import com.gitee.starblues.factory.process.pipe.PluginPipeProcessor;
import com.gitee.starblues.factory.process.pipe.classs.group.*;
import com.gitee.starblues.loader.PluginResourceLoadFactory;
+import com.gitee.starblues.loader.ResourceWrapper;
import com.gitee.starblues.loader.load.PluginClassLoader;
import com.gitee.starblues.realize.BasePlugin;
import org.slf4j.Logger;
@@ -68,7 +69,11 @@ public class PluginClassProcess implements PluginPipeProcessor {
public void registry(PluginRegistryInfo pluginRegistryInfo) throws Exception {
BasePlugin basePlugin = pluginRegistryInfo.getBasePlugin();
PluginResourceLoadFactory pluginResourceLoadFactory = basePlugin.getPluginResourceLoadFactory();
- List pluginResources = pluginResourceLoadFactory.getPluginResources(PluginClassLoader.KEY);
+ ResourceWrapper resourceWrapper = pluginResourceLoadFactory.getPluginResources(PluginClassLoader.KEY);
+ if(resourceWrapper == null){
+ return;
+ }
+ List pluginResources = resourceWrapper.getResources();
if(pluginResources == null){
return;
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/ConfigurationBuilder.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/ConfigurationBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab23f576f4504a69f7b93e37129d8eabf99ef2ff
--- /dev/null
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/ConfigurationBuilder.java
@@ -0,0 +1,145 @@
+package com.gitee.starblues.integration;
+
+import org.pf4j.RuntimeMode;
+import org.springframework.util.StringUtils;
+
+import java.util.Objects;
+
+/**
+ * 通过构造者进行配置插件初始化配置
+ *
+ * @author zhangzhuo
+ * @version 2.2.0
+ */
+public class ConfigurationBuilder extends DefaultIntegrationConfiguration{
+
+ private RuntimeMode runtimeMode = RuntimeMode.DEVELOPMENT;
+ private String pluginPath = "";
+ private String pluginConfigFilePath = "";
+
+ private String uploadTempPath;
+ private String backupPath;
+ private String pluginRestControllerPathPrefix;
+ private Boolean enablePluginIdRestControllerPathPrefix;
+
+
+ public ConfigurationBuilder(Builder builder) {
+ this.runtimeMode = Objects.requireNonNull(builder.runtimeMode, "runtimeMode can't be empty");
+ this.pluginPath = Objects.requireNonNull(builder.pluginPath, "pluginPath can't be empty");
+ this.pluginConfigFilePath = Objects.requireNonNull(builder.pluginConfigFilePath,
+ "pluginConfigFilePath can't be empty");
+ this.uploadTempPath = builder.uploadTempPath;
+ this.backupPath = builder.backupPath;
+ this.pluginRestControllerPathPrefix = builder.pluginRestControllerPathPrefix;
+ this.enablePluginIdRestControllerPathPrefix = builder.enablePluginIdRestControllerPathPrefix;
+ }
+
+ public static Builder toBuilder(){
+ return new Builder();
+ }
+
+ public static class Builder{
+ private RuntimeMode runtimeMode = RuntimeMode.DEVELOPMENT;
+ private String pluginPath = "";
+ private String pluginConfigFilePath = "";
+
+ private String uploadTempPath;
+ private String backupPath;
+ private String pluginRestControllerPathPrefix;
+ private Boolean enablePluginIdRestControllerPathPrefix;
+
+ public Builder runtimeMode(RuntimeMode runtimeMode){
+ this.runtimeMode = runtimeMode;
+ return this;
+ }
+
+ public Builder pluginPath(String pluginPath){
+ this.pluginPath = pluginPath;
+ return this;
+ }
+
+ public Builder pluginConfigFilePath(String pluginConfigFilePath){
+ this.pluginConfigFilePath = pluginConfigFilePath;
+ return this;
+ }
+
+ public Builder uploadTempPath(String uploadTempPath){
+ this.uploadTempPath = uploadTempPath;
+ return this;
+ }
+
+ public Builder backupPath(String backupPath){
+ this.backupPath = backupPath;
+ return this;
+ }
+
+ public Builder pluginRestControllerPathPrefix(String pluginRestControllerPathPrefix){
+ this.pluginRestControllerPathPrefix = pluginRestControllerPathPrefix;
+ return this;
+ }
+
+ public Builder enablePluginIdRestControllerPathPrefix(Boolean enablePluginIdRestControllerPathPrefix){
+ this.enablePluginIdRestControllerPathPrefix = enablePluginIdRestControllerPathPrefix;
+ return this;
+ }
+
+ public ConfigurationBuilder build(){
+ return new ConfigurationBuilder(this);
+ }
+
+ }
+
+
+
+ @Override
+ public RuntimeMode environment() {
+ return runtimeMode;
+ }
+
+ @Override
+ public String pluginPath() {
+ return pluginPath;
+ }
+
+ @Override
+ public String pluginConfigFilePath() {
+ return pluginConfigFilePath;
+ }
+
+
+ @Override
+ public String uploadTempPath() {
+ if(StringUtils.isEmpty(uploadTempPath)){
+ return super.uploadTempPath();
+ } else {
+ return uploadTempPath;
+ }
+ }
+
+ @Override
+ public String backupPath() {
+ if(StringUtils.isEmpty(backupPath)){
+ return super.backupPath();
+ } else {
+ return backupPath;
+ }
+ }
+
+ @Override
+ public String pluginRestControllerPathPrefix() {
+ if(StringUtils.isEmpty(pluginRestControllerPathPrefix)){
+ return super.pluginRestControllerPathPrefix();
+ } else {
+ return pluginRestControllerPathPrefix;
+ }
+ }
+
+ @Override
+ public boolean enablePluginIdRestControllerPathPrefix() {
+ if(enablePluginIdRestControllerPathPrefix == null){
+ return super.enablePluginIdRestControllerPathPrefix();
+ } else {
+ return enablePluginIdRestControllerPathPrefix;
+ }
+ }
+}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java
deleted file mode 100644
index ea307bc86bc9bf0668be3ec4e5a8517febd4e7d7..0000000000000000000000000000000000000000
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.gitee.starblues.integration;
-
-import com.gitee.starblues.extension.AbstractExtension;
-import com.gitee.starblues.extension.ExtensionFactory;
-import com.gitee.starblues.integration.listener.PluginListener;
-import com.gitee.starblues.integration.listener.PluginListenerFactory;
-import com.gitee.starblues.integration.operator.DefaultPluginOperator;
-import com.gitee.starblues.integration.operator.PluginOperator;
-import com.gitee.starblues.integration.user.DefaultPluginUser;
-import com.gitee.starblues.integration.user.PluginUser;
-import org.pf4j.PluginManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanCreationException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.support.GenericApplicationContext;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 开发者直接使用的。插件应用
- * @author zhangzhuo
- * @version 2.0.2
- */
-public class DefaultPluginApplication implements ApplicationContextAware, PluginApplication {
-
- private final Logger log = LoggerFactory.getLogger(DefaultPluginApplication.class);
-
- private ApplicationContext applicationContext;
- private PluginManager pluginManager;
- private ExtensionFactory extensionFactory = ExtensionFactory.getSingleton();
-
- private PluginOperator pluginOperator;
- private PluginUser pluginUser;
-
- private PluginListenerFactory listenerFactory = new PluginListenerFactory();
-
- public DefaultPluginApplication() {
- this(null);
- }
-
-
- public DefaultPluginApplication(List pluginListeners) {
- addListener(pluginListeners);
- }
-
-
- @Override
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- Objects.requireNonNull(applicationContext);
- this.applicationContext = applicationContext;
- this.pluginManager = applicationContext.getBean(PluginManager.class);
- try {
- IntegrationConfiguration configuration = applicationContext.getBean(IntegrationConfiguration.class);
- this.pluginUser = new DefaultPluginUser(this.applicationContext, this.pluginManager);
- this.pluginOperator = new DefaultPluginOperator(
- applicationContext,
- configuration,
- this.pluginManager,
- this.listenerFactory
- );
- } catch (Exception e) {
- throw new BeanCreationException("Instant PluginUser or PluginOperator Failure : " + e.getMessage(), e);
- }
- }
-
-
- @Override
- public PluginOperator getPluginOperator() {
- assertInjected();
- return this.pluginOperator;
- }
-
- @Override
- public PluginUser getPluginUser() {
- assertInjected();
- return this.pluginUser;
- }
-
- /**
- * 检查注入
- */
- private void assertInjected() {
- if (this.applicationContext == null) {
- throw new RuntimeException("ApplicationContext is null, Please check whether the DefaultPluginApplication is injected");
- }
- if (this.pluginManager == null) {
- throw new RuntimeException("PluginManager is null, Please check whether the PluginManager is injected");
- }
- if (this.pluginOperator == null) {
- throw new RuntimeException("PluginOperator is null," +
- " Please check whether the PluginManager or ApplicationContext is injected");
- }
- if (this.pluginUser == null) {
- throw new RuntimeException("pluginUser is null," +
- " Please check whether the PluginManager or ApplicationContext is injected");
- }
- }
-
- /**
- * 添加插件扩展
- * @param extension 扩展实现对象
- * @return DefaultPluginApplication
- */
- public DefaultPluginApplication addExtension(AbstractExtension extension) {
- this.extensionFactory.addExtension(extension);
- return this;
- }
-
-
- @Override
- public void addListener(PluginListener pluginListener) {
- this.listenerFactory.addPluginListener(pluginListener);
- }
-
- @Override
- public void addListener(Class pluginListenerClass) {
- listenerFactory.addPluginListener(pluginListenerClass);
- }
-
- @Override
- public void addListener(List pluginListeners) {
- if(pluginListeners == null || pluginListeners.isEmpty()){
- return;
- }
- for (PluginListener pluginListener : pluginListeners) {
- this.listenerFactory.addPluginListener(pluginListener);
- }
- }
-}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java
index a0af24721ac5cb219c1532918cb0527bd761738c..e25e698b8dc1198e9590d849e292ecdab2c24d5f 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java
@@ -9,7 +9,7 @@ import java.util.List;
* 插件bean监听者上下文。
* 注意: 监听者必须在初始化插件前添加,否则在初始化阶段可能无法触发添加的监听者。
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public interface PluginListenerContext {
@@ -19,9 +19,11 @@ public interface PluginListenerContext {
*/
void addListener(PluginListener pluginListener);
+
/**
* 添加监听者
* @param pluginListenerClass 插件监听者Class类
+ * @param 继承PluginListener的子类
*/
void addListener(Class pluginListenerClass);
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/AbstractPluginApplication.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/AbstractPluginApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab1fb9c68336b1849fde685cec896449364db1ef
--- /dev/null
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/AbstractPluginApplication.java
@@ -0,0 +1,69 @@
+package com.gitee.starblues.integration.application;
+
+import com.gitee.starblues.extension.AbstractExtension;
+import com.gitee.starblues.extension.ExtensionFactory;
+import com.gitee.starblues.integration.IntegrationConfiguration;
+import com.gitee.starblues.integration.listener.PluginListener;
+import com.gitee.starblues.integration.listener.PluginListenerFactory;
+import org.springframework.beans.factory.BeanCreationException;
+import org.springframework.context.ApplicationContext;
+
+import java.util.List;
+
+/**
+ * 公用的的插件应用
+ *
+ * @author zhangzhuo
+ * @version 2.2.0
+ */
+public abstract class AbstractPluginApplication implements PluginApplication {
+
+ protected final PluginListenerFactory listenerFactory = new PluginListenerFactory();
+ protected final ExtensionFactory extensionFactory = ExtensionFactory.getSingleton();
+
+
+ @Override
+ public void addExtension(AbstractExtension extension) {
+ extensionFactory.addExtension(extension);
+ }
+
+ @Override
+ public void addListener(PluginListener pluginListener) {
+ this.listenerFactory.addPluginListener(pluginListener);
+ }
+
+ @Override
+ public void addListener(Class pluginListenerClass) {
+ listenerFactory.addPluginListener(pluginListenerClass);
+ }
+
+ @Override
+ public void addListener(List pluginListeners) {
+ if(pluginListeners == null || pluginListeners.isEmpty()){
+ return;
+ }
+ for (PluginListener pluginListener : pluginListeners) {
+ this.listenerFactory.addPluginListener(pluginListener);
+ }
+ }
+
+ /**
+ * 子类可通过Application 获取插件定义的配置
+ * @param applicationContext applicationContext
+ * @return IntegrationConfiguration
+ */
+ protected IntegrationConfiguration getConfiguration(ApplicationContext applicationContext){
+ IntegrationConfiguration configuration = null;
+ try {
+ configuration = applicationContext.getBean(IntegrationConfiguration.class);
+ } catch (Exception e){
+ // no show exception
+ }
+ if(configuration == null){
+ throw new BeanCreationException("Not Found IntegrationConfiguration, Please define " +
+ "IntegrationConfiguration to Spring Bean.");
+ }
+ return configuration;
+ }
+
+}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/AutoPluginApplication.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/AutoPluginApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..dcba0712e210ef5350ac86d34e3b26474e6e334a
--- /dev/null
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/AutoPluginApplication.java
@@ -0,0 +1,62 @@
+package com.gitee.starblues.integration.application;
+
+import com.gitee.starblues.integration.pf4j.Pf4jFactory;
+import com.gitee.starblues.integration.listener.PluginInitializerListener;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+/**
+ * 自动初始化的 PluginApplication。该PluginApplication 基于 Spring InitializingBean 自动初始化插件。
+ *
+ * @author zhangzhuo
+ * @version 2.2.0
+ */
+public class AutoPluginApplication extends DefaultPluginApplication
+ implements PluginApplication, InitializingBean, ApplicationContextAware {
+
+ private ApplicationContext applicationContext;
+ private PluginInitializerListener pluginInitializerListener;
+
+ public AutoPluginApplication() {
+ super();
+ }
+
+ public AutoPluginApplication(Pf4jFactory integrationFactory) {
+ super(integrationFactory);
+ }
+
+ /**
+ * 设置插件初始化监听器
+ * @param pluginInitializerListener 插件监听器
+ */
+ public void setPluginInitializerListener(PluginInitializerListener pluginInitializerListener) {
+ this.pluginInitializerListener = pluginInitializerListener;
+ }
+
+
+ @Override
+ public void initialize(ApplicationContext applicationContext,
+ PluginInitializerListener listener) {
+ // 此处不允许手动初始化!
+ throw new RuntimeException("Cannot be initialized manually");
+ }
+
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
+ }
+
+ /**
+ * Spring boot bean属性被Set完后调用。会自动初始化插件
+ * @throws Exception 初始化异常
+ */
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ if(applicationContext == null){
+ throw new Exception("Auto initialize failed. ApplicationContext Not injected.");
+ }
+ super.initialize(applicationContext, pluginInitializerListener);
+ }
+}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/DefaultPluginApplication.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/DefaultPluginApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..882c753c522b7059b5eb65ff2b781c173a9f1c4a
--- /dev/null
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/DefaultPluginApplication.java
@@ -0,0 +1,96 @@
+package com.gitee.starblues.integration.application;
+
+import com.gitee.starblues.integration.pf4j.DefaultPf4JFactory;
+import com.gitee.starblues.integration.IntegrationConfiguration;
+import com.gitee.starblues.integration.pf4j.Pf4jFactory;
+import com.gitee.starblues.integration.listener.PluginInitializerListener;
+import com.gitee.starblues.integration.operator.DefaultPluginOperator;
+import com.gitee.starblues.integration.operator.PluginOperator;
+import com.gitee.starblues.integration.user.DefaultPluginUser;
+import com.gitee.starblues.integration.user.PluginUser;
+import org.pf4j.PluginManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+
+/**
+ * 默认的插件 PluginApplication
+ * @author zhangzhuo
+ * @version 2.2.0
+ */
+public class DefaultPluginApplication extends AbstractPluginApplication {
+
+ private final Logger log = LoggerFactory.getLogger(DefaultPluginApplication.class);
+
+ private Pf4jFactory integrationFactory;
+ private PluginUser pluginUser;
+ private PluginOperator pluginOperator;
+
+ private AtomicBoolean beInitialized = new AtomicBoolean(false);
+
+ public DefaultPluginApplication() {
+ }
+
+ public DefaultPluginApplication(Pf4jFactory integrationFactory){
+ this.integrationFactory = integrationFactory;
+ }
+
+
+ @Override
+ public synchronized void initialize(ApplicationContext applicationContext,
+ PluginInitializerListener listener) {
+ Objects.requireNonNull(applicationContext, "ApplicationContext can't be null");
+ if(beInitialized.get()){
+ throw new RuntimeException("Plugin has been initialized");
+ }
+ IntegrationConfiguration configuration = getConfiguration(applicationContext);
+ if(integrationFactory == null){
+ integrationFactory = new DefaultPf4JFactory(configuration);
+ }
+ PluginManager pluginManager = integrationFactory.getPluginManager();
+ pluginUser = new DefaultPluginUser(applicationContext, pluginManager);
+ pluginOperator = new DefaultPluginOperator(
+ applicationContext,
+ configuration,
+ pluginManager,
+ this.listenerFactory
+ );
+ try {
+ pluginOperator.initPlugins(listener);
+ beInitialized.set(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Override
+ public PluginOperator getPluginOperator() {
+ assertInjected();
+ return pluginOperator;
+ }
+
+ @Override
+ public PluginUser getPluginUser() {
+ assertInjected();
+ return pluginUser;
+ }
+
+ /**
+ * 检查注入
+ */
+ private void assertInjected() {
+ if (this.pluginUser == null) {
+ throw new RuntimeException("PluginUser is null, Please check whether the DefaultPluginApplication is injected");
+ }
+ if (this.pluginOperator == null) {
+ throw new RuntimeException("PluginOperator is null, Please check whether the DefaultPluginApplication is injected");
+ }
+ }
+
+
+}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginApplication.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/PluginApplication.java
similarity index 39%
rename from springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginApplication.java
rename to springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/PluginApplication.java
index d071f677c2e689ca9793c7065f6b9df2ff5efd62..233475f1f17191d159466e364a0d1d05648514c1 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginApplication.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/PluginApplication.java
@@ -1,15 +1,26 @@
-package com.gitee.starblues.integration;
+package com.gitee.starblues.integration.application;
+import com.gitee.starblues.extension.AbstractExtension;
+import com.gitee.starblues.integration.PluginListenerContext;
+import com.gitee.starblues.integration.listener.PluginInitializerListener;
import com.gitee.starblues.integration.operator.PluginOperator;
import com.gitee.starblues.integration.user.PluginUser;
+import org.springframework.context.ApplicationContext;
/**
- * 插件应用。需要主程序定义成@Bean
+ * 插件应用。
* @author zhangzhuo
- * @version 2.0.2
+ * @version 2.2.0
*/
public interface PluginApplication extends PluginListenerContext {
+ /**
+ * 初始化
+ * @param applicationContext Spring上下文
+ * @param listener 插件初始化监听者
+ */
+ void initialize(ApplicationContext applicationContext, PluginInitializerListener listener);
+
/**
* 获得插插件操作者
@@ -23,4 +34,10 @@ public interface PluginApplication extends PluginListenerContext {
*/
PluginUser getPluginUser();
+ /**
+ * 添加扩展
+ * @param extension 扩展类
+ */
+ void addExtension(AbstractExtension extension);
+
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/package-info.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..96722a4bbd8d0dd73e7f137e246ba75cdfa8e99e
--- /dev/null
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/application/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * 插件 PluginApplication 的实现包
+ *
+ * @author zhangzhuo
+ * @version 1.0
+ */
+package com.gitee.starblues.integration.application;
\ No newline at end of file
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/AbstractPluginInitializer.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/AbstractPluginInitializer.java
deleted file mode 100644
index a9e87260e65010170166363866c44776cd8080ee..0000000000000000000000000000000000000000
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/AbstractPluginInitializer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.gitee.starblues.integration.initialize;
-
-import com.gitee.starblues.integration.listener.PluginInitializerListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 抽象的插件初始化者
- * @author zhangzhuo
- * @version 1.0
- * @see AutoPluginInitializer
- * @see ManualPluginInitializer
- */
-public abstract class AbstractPluginInitializer implements PluginInitializer{
-
- private final Logger log = LoggerFactory.getLogger(this.getClass());
-
- protected PluginInitializerListener pluginInitializerListener;
-
- protected AbstractPluginInitializer() {
- }
-
- protected AbstractPluginInitializer(PluginInitializerListener pluginInitializerListener) {
- this.pluginInitializerListener = pluginInitializerListener;
- }
-
- @Override
- public void initialize() throws Exception {
- log.info("Start execute plugin initializer.");
- this.executeInitialize();
- }
-
- /**
- * 执行初始化
- * @throws Exception 插件执行初始化异常
- */
- public abstract void executeInitialize() throws Exception;
-
-
- /**
- * 设置监听者
- * @param pluginInitializerListener 初始化监听者
- */
- public void setPluginInitializerListener(PluginInitializerListener pluginInitializerListener) {
- this.pluginInitializerListener = pluginInitializerListener;
- }
-
-}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/AutoPluginInitializer.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/AutoPluginInitializer.java
deleted file mode 100644
index 28ef0c8eef5e67ce4d780821d9817a6348d310a0..0000000000000000000000000000000000000000
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/AutoPluginInitializer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.gitee.starblues.integration.initialize;
-
-import com.gitee.starblues.integration.PluginApplication;
-import com.gitee.starblues.integration.listener.PluginInitializerListener;
-import com.gitee.starblues.integration.operator.PluginOperator;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import javax.annotation.PostConstruct;
-
-/**
- * 自动初始化者
- * @author zhangzhuo
- * @version 1.0
- */
-public class AutoPluginInitializer extends AbstractPluginInitializer {
-
-
- private final PluginOperator pluginOperator;
-
-
- public AutoPluginInitializer(@Autowired PluginApplication pluginApplication) {
- this.pluginOperator = pluginApplication.getPluginOperator();
- }
-
- public AutoPluginInitializer(PluginApplication pluginApplication,
- PluginInitializerListener pluginInitializerListener) {
- super(pluginInitializerListener);
- this.pluginOperator = pluginApplication.getPluginOperator();
- }
-
-
- @PostConstruct
- @Override
- public void executeInitialize() throws Exception {
- pluginOperator.initPlugins(pluginInitializerListener);
- }
-
-}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/ManualPluginInitializer.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/ManualPluginInitializer.java
deleted file mode 100644
index ae1d9dc95d87efcac9515606b376aa5a064b4045..0000000000000000000000000000000000000000
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/ManualPluginInitializer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.gitee.starblues.integration.initialize;
-
-import com.gitee.starblues.integration.PluginApplication;
-import com.gitee.starblues.integration.listener.PluginInitializerListener;
-import com.gitee.starblues.integration.operator.PluginOperator;
-
-/**
- * 插件手动初始化者
- * @author zhangzhuo
- * @version 1.0
- */
-public class ManualPluginInitializer extends AbstractPluginInitializer {
-
- private final PluginOperator pluginOperator;
-
- public ManualPluginInitializer(PluginApplication pluginApplication) {
- this.pluginOperator = pluginApplication.getPluginOperator();
- }
-
- public ManualPluginInitializer(PluginApplication pluginApplication,
- PluginInitializerListener pluginInitializerListener) {
- super(pluginInitializerListener);
- this.pluginOperator = pluginApplication.getPluginOperator();
- }
-
-
- @Override
- public void executeInitialize() throws Exception {
- pluginOperator.initPlugins(pluginInitializerListener);
- }
-
-}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/PluginInitializer.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/PluginInitializer.java
deleted file mode 100644
index 4c4b09453a7d1719604b92c3993edd0bbcdb98ff..0000000000000000000000000000000000000000
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/initialize/PluginInitializer.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.gitee.starblues.integration.initialize;
-
-
-/**
- * 插件初始化者
- * @author zhangzhuo
- * @version 1.0
- * @see AbstractPluginInitializer
- */
-public interface PluginInitializer {
-
- /**
- * 初始化
- * @throws Exception 插件安装异常
- */
- void initialize() throws Exception;
-
-
-}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java
index 83cd74471e38db52fe3686e98c1f4d2f741acb0d..629eac24c45f496dec6794f80ecae3422e390624 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java
@@ -1,6 +1,5 @@
package com.gitee.starblues.integration.listener;
-import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import java.util.ArrayList;
@@ -63,6 +62,7 @@ public class PluginListenerFactory implements PluginListener{
/**
* 添加监听者
* @param pluginListenerClass 插件监听者Class类
+ * @param 插件监听者类。继承 PluginListener
*/
public void addPluginListener(Class pluginListenerClass){
if(pluginListenerClass != null){
@@ -93,4 +93,12 @@ public class PluginListenerFactory implements PluginListener{
public List getListeners() {
return listeners;
}
+
+ /**
+ * 得到监听者class
+ * @return 监听者class集合
+ */
+ public List getListenerClasses() {
+ return listenerClasses;
+ }
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java
index 872c1c485d79b5f36fc71a333a4b5ba959a7cb98..6070a4bbb987810b5f88bc5ace04757097360066 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java
@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
/**
* 默认的插件操作者
* @author zhangzhuo
- * @version 2.1.0
+ * @version 2.2.0
*/
public class DefaultPluginOperator implements PluginOperator {
@@ -57,8 +57,8 @@ public class DefaultPluginOperator implements PluginOperator {
IntegrationConfiguration integrationConfiguration,
PluginManager pluginManager,
PluginListenerFactory pluginListenerFactory) {
- Objects.requireNonNull(integrationConfiguration);
- Objects.requireNonNull(pluginManager);
+ Objects.requireNonNull(integrationConfiguration, "IntegrationConfiguration can't be null");
+ Objects.requireNonNull(pluginManager, "PluginManager can't be null");
this.integrationConfiguration = integrationConfiguration;
this.pluginManager = pluginManager;
this.pluginFactory = new DefaultPluginFactory(applicationContext, pluginListenerFactory);
@@ -111,14 +111,32 @@ public class DefaultPluginOperator implements PluginOperator {
}
String pluginId = null;
try {
- pluginId = pluginManager.loadPlugin(path);
+ if(!Files.exists(path)){
+ throw new FileNotFoundException("Not found this path " + path);
+ }
+ Path pluginsRoot = pluginManager.getPluginsRoot();
+ if(path.getParent().compareTo(pluginsRoot) == 0){
+ // 说明该插件文件存在于插件root目录下。
+ pluginId = pluginManager.loadPlugin(path);
+ } else {
+ File sourceFile = path.toFile();
+ String targetPathString = pluginsRoot.toString() + File.separator +
+ sourceFile.getName();
+ Path targetPath = PluginFileUtils.getExistPath(Paths.get(targetPathString));
+ if(Files.exists(targetPath)){
+ // 如果存在该文件, 则备份
+ backup(targetPath, "install-backup", 2);
+ }
+ FileUtils.copyFile(sourceFile, targetPath.toFile());
+ pluginId = pluginManager.loadPlugin(targetPath);
+ }
if(StringUtils.isEmpty(pluginId)){
log.error("Install plugin '{}' failure, this plugin id is empty.", pluginId);
return false;
}
GlobalRegistryInfo.addOperatorPluginInfo(pluginId, PluginOperatorInfo.OperatorType.INSTALL, true);
if(start(pluginId)){
- log.info("Install plugin '{}' success. {}", pluginId);
+ log.info("Install plugin '{}' success", pluginId);
return true;
} else {
log.error("Install plugin '{}' failure", pluginId);
@@ -129,7 +147,7 @@ public class DefaultPluginOperator implements PluginOperator {
log.error("Install plugin '{}' failure. {}", pluginId, e.getMessage());
log.info("Start uninstall plugin '{}' failure", pluginId);
try {
- uninstall(pluginId);
+ uninstall(pluginId, false);
} catch (Exception uninstallException){
log.error("Uninstall plugin '{}' failure. {}", pluginId, e.getMessage());
}
@@ -142,11 +160,10 @@ public class DefaultPluginOperator implements PluginOperator {
}
@Override
- public boolean uninstall(String pluginId) throws Exception {
+ public boolean uninstall(String pluginId, boolean isBackup) throws Exception {
PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginId);
if(pluginWrapper == null){
- log.error("Uninstall plugin failure, Not found plugin '{}'", pluginId);
- return false;
+ throw new Exception("Uninstall plugin failure, Not found plugin ''" + pluginId + "'");
}
Exception exception = null;
try {
@@ -157,9 +174,11 @@ public class DefaultPluginOperator implements PluginOperator {
exception = e;
}
try {
- if (pluginManager.unloadPlugin(pluginId)) {
- // 卸载完后,将插件文件移到备份文件中
- backup(pluginWrapper.getPluginPath(), "uninstallPlugin", 1);
+ if(isBackup){
+ // 将插件文件移到备份文件中
+ backup(pluginWrapper.getPluginPath(), "uninstall", 1);
+ }
+ if (pluginManager.deletePlugin(pluginId)) {
log.info("Uninstall plugin '{}' success", pluginId);
return true;
} else {
@@ -262,6 +281,9 @@ public class DefaultPluginOperator implements PluginOperator {
String configPath = integrationConfiguration.pluginConfigFilePath() +
File.separator + sourceFile.getName();
Path targetPath = PluginFileUtils.getExistPath(Paths.get(configPath));
+ if(Files.exists(targetPath)){
+ backup(targetPath, "install-config-backup",2);
+ }
FileUtils.copyFile(sourceFile, targetPath.toFile());
return true;
}
@@ -274,22 +296,25 @@ public class DefaultPluginOperator implements PluginOperator {
String fileName = configFile.getOriginalFilename();
String configPath = integrationConfiguration.pluginConfigFilePath() +
File.separator + fileName;
- Path srcPath = PluginFileUtils.getExistPath(Paths.get(configPath));
- Files.write(srcPath, configFile.getBytes());
+ Path targetPath = PluginFileUtils.getExistPath(Paths.get(configPath));
+ if(Files.exists(targetPath)){
+ backup(targetPath, "upload-config-backup",2);
+ }
+ Files.write(targetPath, configFile.getBytes());
return true;
}
@Override
- public boolean backupPlugin(Path path, String appendName) throws Exception {
+ public boolean backupPlugin(Path path, String sign) throws Exception {
Objects.requireNonNull(path);
- return backup(path, appendName, 2);
+ return backup(path, sign, 2);
}
@Override
- public boolean backupPlugin(String pluginId, String appendName) throws Exception {
+ public boolean backupPlugin(String pluginId, String sign) throws Exception {
PluginWrapper pluginManager = getPluginWrapper(pluginId, "BackupPlugin by pluginId");
- return backupPlugin(pluginManager.getPluginPath(), appendName);
+ return backupPlugin(pluginManager.getPluginPath(), sign);
}
@Override
@@ -362,7 +387,7 @@ public class DefaultPluginOperator implements PluginOperator {
File target = pluginFilePath.toFile();
if(target.exists()){
// 存在则拷贝一份
- backup(pluginFilePath, "uploadPlugin", 2);
+ backup(pluginFilePath, "upload", 2);
}
FileUtils.copyFile(verifyPath.toFile(), target);
// 删除临时文件
@@ -415,25 +440,29 @@ public class DefaultPluginOperator implements PluginOperator {
/**
* 备份
* @param sourcePath 源文件的路径
- * @param appendName 追加的字符串
+ * @param sign 文件标志
* @param type 类型 1移动 2拷贝
* @return 结果
- * @throws Exception Exception
*/
- private boolean backup(Path sourcePath, String appendName, int type) throws Exception {
- if(isDev()){
- // 如果是开发环境, 则不进行备份
- return true;
- }
- if(!Files.exists(sourcePath)){
- throw new FileNotFoundException("path ' " + sourcePath.toString() + "' does not exist!");
- }
+ private boolean backup(Path sourcePath, String sign, int type) {
try {
+ if(isDev()){
+ // 如果是开发环境, 则不进行备份
+ return false;
+ }
+ if(sourcePath == null){
+ return false;
+ }
+ if(!Files.exists(sourcePath)){
+ log.error("path '{}' does not exist", sourcePath.toString());
+ return false;
+ }
String fileName = sourcePath.getFileName().toString();
- String targetName = integrationConfiguration.backupPath() + File.separator + getNowTimeByFormat();
- if(!StringUtils.isEmpty(appendName)){
- targetName = targetName + "_" + appendName;
+ String targetName = integrationConfiguration.backupPath() + File.separator;
+ if(!StringUtils.isEmpty(sign)){
+ targetName = targetName + "[" + sign + "]";
}
+ targetName = targetName + "[" + getNowTimeByFormat() + "]";
Path target = Paths.get(targetName + "_" + fileName);
if(!Files.exists(target.getParent())){
Files.createDirectories(target.getParent());
@@ -444,13 +473,15 @@ public class DefaultPluginOperator implements PluginOperator {
// 源文件字节为0, 说明为删除的插件。不需要备份
return true;
}
- FileUtils.writeByteArrayToFile(targetFile, FileUtils.readFileToByteArray(sourceFile));
+ FileUtils.copyFile(sourceFile, targetFile);
if(type == 1){
- FileUtils.writeByteArrayToFile(sourceFile, "".getBytes());
+ // 是移动的话, 则删除源文件
+ FileUtils.deleteQuietly(sourceFile);
}
return true;
} catch (IOException e) {
- throw new Exception("Backup plugin jar '" + sourcePath.toString() + "' failure : " + e.getMessage(), e);
+ log.error("Backup plugin jar '{}' failure. {}", sourcePath.toString(), e.getMessage(), e);
+ return false;
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java
index 091b5fafbee7e23459f2ad8b6efd7beac32f72fd..6e521502522c96f8b2c0f5c8e4de8a63685ad9c2 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java
@@ -12,7 +12,7 @@ import java.util.Set;
/**
* 操作插件的接口
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
* @see DefaultPluginOperator
*/
public interface PluginOperator {
@@ -28,6 +28,7 @@ public interface PluginOperator {
/**
* 通过路径安装插件(会启用), 该插件文件必须存在于服务器 [适用于生产环境]
+ * 如果在插件目录存在同名的插件包, 系统会自动备份该插件包。备份文件命名规则为;[install-backup][时间]_原jar名.jar
* @param path 插件路径
* @return 成功返回true.不成功抛出异常或者返回false
* @throws Exception 异常信息
@@ -38,10 +39,11 @@ public interface PluginOperator {
/**
* 卸载插件 [适用于生产环境]
* @param pluginId 插件id
+ * @param isBackup 是否备份原来的插件。备份文件命名规则为;[uninstall][时间]_原jar名.jar
* @return 成功返回true.不成功抛出异常或者返回false
* @throws Exception 异常信息
*/
- boolean uninstall(String pluginId) throws Exception;
+ boolean uninstall(String pluginId, boolean isBackup) throws Exception;
/**
* 启用插件 [适用于生产环境、开发环境]
@@ -63,6 +65,7 @@ public interface PluginOperator {
/**
* 上传插件并启用插件。[适用于生产环境]
+ * 如果在插件目录存在同名的插件包, 系统会自动备份该插件包。备份文件命名规则为;[install-backup][时间]_原jar名.jar
* @param pluginFile 配置文件
* @return 成功返回true.不成功返回false, 或者抛出异常
* @throws Exception 异常信息
@@ -71,15 +74,17 @@ public interface PluginOperator {
/**
* 通过路径安装插件的配置文件。该文件必须存在于服务器。[适用于生产环境]
+ * 如果配置文件目录存在同名的配置文件, 系统会自动备份该配置文件。备份文件命名规则为;[install-config-backup][时间]_原jar名.jar
* @param path 配置文件路径。
* @return 成功返回true.不成功返回false, 或者抛出异常
- * @throws Exception
+ * @throws Exception 安装异常
*/
boolean installConfigFile(Path path) throws Exception;
/**
- * 上传配置文件(如果存在, 则覆盖)。[适用于生产环境]
+ * 上传配置文件。[适用于生产环境]
+ * 如果配置文件目录存在同名的配置文件, 系统会自动备份该配置文件。备份文件命名规则为;[upload-config-backup][时间]_原jar名.jar
* @param configFile 配置文件
* @return 成功返回true.不成功返回false, 或者抛出异常
* @throws Exception 异常信息
@@ -89,20 +94,20 @@ public interface PluginOperator {
/**
* 通过路径备份文件。可备份插件和插件的配置文件。[适用于生产环境]
* @param path 路径
- * @param appendName 追加的名称
+ * @param sign 备份文件的自定义标识
* @return 成功返回true.不成功返回false, 或者抛出异常
* @throws Exception 异常信息
*/
- boolean backupPlugin(Path path, String appendName) throws Exception;
+ boolean backupPlugin(Path path, String sign) throws Exception;
/**
* 通过插件id备份插件。[适用于生产环境]
* @param pluginId 插件id
- * @param appendName 追加的名称
+ * @param sign 备份文件的自定义标识
* @return 成功返回true.不成功返回false, 或者抛出异常
* @throws Exception 异常信息
*/
- boolean backupPlugin(String pluginId, String appendName) throws Exception;
+ boolean backupPlugin(String pluginId, String sign) throws Exception;
/**
* 获取插件信息 [适用于生产环境、开发环境]
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginLegalVerify.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginLegalVerify.java
index d23cba7e3fb6f0a2c211b1442e0eea03ebaf20f6..f7fa541c2a92b0e6db1529eeae260294ec60a2ed 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginLegalVerify.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginLegalVerify.java
@@ -22,23 +22,23 @@ public class PluginLegalVerify implements PluginVerify{
@Override
- public Path verify(Path path) throws PluginException {
+ public Path verify(Path path) throws Exception {
if(path == null){
- throw new PluginException("path can not be null");
+ throw new IllegalArgumentException("path can not be null");
}
if(!pluginDescriptorFinder.isApplicable(path)){
// 插件包不合法
- throw new PluginException(path.toString() + " : plugin illegal");
+ throw new Exception(path.toString() + " : plugin illegal");
}
PluginDescriptor pluginDescriptor = pluginDescriptorFinder.find(path);
if(pluginDescriptor == null){
- throw new PluginException(path.toString() + " : Not found Plugin Descriptor");
+ throw new Exception(path.toString() + " : Not found Plugin Descriptor");
}
if(StringUtils.isEmpty(pluginDescriptor.getPluginId())){
- throw new PluginException(path.toString() + " : Not found Plugin Id");
+ throw new Exception(path.toString() + " : Not found Plugin Id");
}
if(StringUtils.isEmpty(pluginDescriptor.getPluginClass())){
- throw new PluginException(path.toString() + " : Not found Plugin Class");
+ throw new Exception(path.toString() + " : Not found Plugin Class");
}
return postVerify(path, pluginDescriptor);
}
@@ -48,9 +48,9 @@ public class PluginLegalVerify implements PluginVerify{
* @param path 路径
* @param pluginDescriptor 插件解析者
* @return 返回路径
- * @throws PluginException 插件异常
+ * @throws Exception 插件异常
*/
- protected Path postVerify(Path path, PluginDescriptor pluginDescriptor) throws PluginException{
+ protected Path postVerify(Path path, PluginDescriptor pluginDescriptor) throws Exception{
return path;
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginUploadVerify.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginUploadVerify.java
index a8b79cd1f4e30c7ae4a314e33dcae495920ef9e2..7f3ea59461363580009b491128e9408a3993b963 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginUploadVerify.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginUploadVerify.java
@@ -23,7 +23,7 @@ public class PluginUploadVerify extends PluginLegalVerify{
@Override
- protected Path postVerify(Path path, PluginDescriptor pluginDescriptor) throws PluginException {
+ protected Path postVerify(Path path, PluginDescriptor pluginDescriptor) throws Exception {
PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginDescriptor.getPluginId());
if(pluginWrapper == null){
// 当前没有该插件包运行
@@ -36,6 +36,6 @@ public class PluginUploadVerify extends PluginLegalVerify{
.append("> ; version <").append(runPluginDescriptor.getVersion())
.append("> ) is already exist in the current environment。 ")
.append("Please uninstall the plugin, then upload and update the plugin");
- throw new PluginException(errorMsg.toString());
+ throw new Exception(errorMsg.toString());
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginVerify.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginVerify.java
index c63bdca8c53fa63ce6695d56fbe0fe0f264f793a..fcd967fc6898ceafb74ee95534bcd1d59ef65698 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginVerify.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/verify/PluginVerify.java
@@ -1,6 +1,5 @@
package com.gitee.starblues.integration.operator.verify;
-import org.pf4j.PluginException;
import java.nio.file.Path;
@@ -17,8 +16,8 @@ public interface PluginVerify {
* 校验插件包
* @param path 插件路径
* @return 返回校验成功的路径
- * @throws PluginException 插件异常
+ * @throws Exception 插件异常
*/
- Path verify(Path path) throws PluginException;
+ Path verify(Path path) throws Exception;
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultIntegrationFactory.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/pf4j/DefaultPf4JFactory.java
similarity index 70%
rename from springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultIntegrationFactory.java
rename to springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/pf4j/DefaultPf4JFactory.java
index 94c2833642f2dd375250828c07b65bdaa39d07b1..e52cf7cff58d0197947e0e4bb2b01717fdf8d2f4 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultIntegrationFactory.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/pf4j/DefaultPf4JFactory.java
@@ -1,5 +1,6 @@
-package com.gitee.starblues.integration;
+package com.gitee.starblues.integration.pf4j;
+import com.gitee.starblues.integration.IntegrationConfiguration;
import org.pf4j.*;
import java.nio.file.Path;
@@ -9,17 +10,25 @@ import java.util.Objects;
/**
* 默认的插件集成工厂
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
-public class DefaultIntegrationFactory implements IntegrationFactory {
+public class DefaultPf4JFactory implements Pf4jFactory {
+ private final IntegrationConfiguration configuration;
+
+ public DefaultPf4JFactory(IntegrationConfiguration configuration) {
+ this.configuration = configuration;
+ }
@Override
- public PluginManager getPluginManager(IntegrationConfiguration configuration) throws PluginException {
+ public PluginManager getPluginManager() {
+ if(configuration == null){
+ throw new NullPointerException("IntegrationConfiguration is null");
+ }
RuntimeMode environment = configuration.environment();
if(environment == null){
- throw new PluginException("Run environment can is null" + configuration.environment());
+ throw new RuntimeException("Configuration RuntimeMode is null" + configuration.environment());
}
if(RuntimeMode.DEVELOPMENT == environment){
// 开发环境下的插件管理者
@@ -42,7 +51,7 @@ public class DefaultIntegrationFactory implements IntegrationFactory {
}
};
} else {
- throw new PluginException("Not found run environment " + configuration.environment());
+ throw new RuntimeException("Not found run environment " + configuration.environment());
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/IntegrationFactory.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/pf4j/Pf4jFactory.java
similarity index 34%
rename from springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/IntegrationFactory.java
rename to springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/pf4j/Pf4jFactory.java
index f2f8d5b462290e395dedfc90ff6fb46ec05e545b..341e2ed253c8fe39be8490c32a6e217d75192a04 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/IntegrationFactory.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/pf4j/Pf4jFactory.java
@@ -1,22 +1,20 @@
-package com.gitee.starblues.integration;
+package com.gitee.starblues.integration.pf4j;
-import org.pf4j.PluginException;
+import com.gitee.starblues.integration.application.DefaultPluginApplication;
import org.pf4j.PluginManager;
/**
- * 集成工厂
+ * Pf4j 集成工厂。获取Pf4j的PluginManager对象
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
* @see DefaultPluginApplication
*/
-public interface IntegrationFactory {
+public interface Pf4jFactory {
/**
* 得到插件管理者
- * @param configuration 插件配置
* @return 插件管理者
- * @throws PluginException 插件异常
*/
- PluginManager getPluginManager(IntegrationConfiguration configuration) throws PluginException;
+ PluginManager getPluginManager();
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractPluginSpringBeanRefresh.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractPluginSpringBeanRefresh.java
index 2d527b4cf6d328ed73c3c3d01aac03980719c47c..e0fd1b4382332f971cc6af730c69df536ce87bf9 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractPluginSpringBeanRefresh.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractPluginSpringBeanRefresh.java
@@ -1,6 +1,6 @@
package com.gitee.starblues.integration.refresh;
-import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
import java.util.List;
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractSpringBeanRefresh.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractSpringBeanRefresh.java
index 8cdffce11577231e782292a91b57cd7faa869e04..8cee174cee66ee1830ef1989f1d14655b6b189af 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractSpringBeanRefresh.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/refresh/AbstractSpringBeanRefresh.java
@@ -1,6 +1,6 @@
package com.gitee.starblues.integration.refresh;
-import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
import com.gitee.starblues.integration.listener.PluginListener;
import java.lang.reflect.ParameterizedType;
@@ -64,6 +64,7 @@ public abstract class AbstractSpringBeanRefresh implements PluginListener {
/**
* 刷新bean
+ * @return 返回刷新后的Bean集合
*/
protected List refresh(){
return pluginApplication
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java
index 750bf77c1027db924cd748cf05e959461a240cc8..3638eac42b93ec9d6895d33e8bf8c27d1f749fd3 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java
@@ -19,8 +19,8 @@ public class DefaultPluginUser implements PluginUser{
private final PluginManager pluginManager;
public DefaultPluginUser(ApplicationContext applicationContext, PluginManager pluginManager) {
- Objects.requireNonNull(applicationContext);
- Objects.requireNonNull(pluginManager);
+ Objects.requireNonNull(applicationContext, "ApplicationContext can't be null");
+ Objects.requireNonNull(pluginManager, "PluginManager can't be null");
this.applicationContext = (GenericApplicationContext)applicationContext;
this.pluginManager = pluginManager;
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java
index 37d25f8f0d639786a719bdd06f4e4c165c3c4b7b..52895fb610b6900df92e743ce4ccc51d4c6ad9a0 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java
@@ -4,7 +4,8 @@ import java.util.List;
import java.util.Map;
/**
- * 插件使用者
+ * 该接口用于在主程序操作Spring管理的插件bean.
+ * 主要用途: 在主程序定义接口。插件中实现该接口做扩展, 主程序通过接口class可以获取到插件中的实现类。
* @author zhangzhuo
* @version 2.0.2
*/
@@ -17,6 +18,7 @@ public interface PluginUser {
* @return T
*/
T getBean(String name);
+
/**
* 通过aClass得到bean。(Spring管理的bean)
* @param aClass class
@@ -36,6 +38,10 @@ public interface PluginUser {
/**
* 在主程序中定义的接口。
* 插件或者主程序实现该接口。可以该方法获取到实现该接口的所有实现类。(Spring管理的bean)
+ * 使用场景:
+ * 1. 在主程序定义接口
+ * 2. 在主程序和插件包中都存在实现该接口, 并使用Spring的组件注解(@Component、@Service)
+ * 3. 使用该方法可以获取到所以实现该接口的实现类(主程序和插件中)。
* @param aClass 接口的类
* @param bean的类型
* @return List
@@ -44,7 +50,10 @@ public interface PluginUser {
/**
* 得到主函数中定义的类。
- * 主程序实现该接口。可以该方法获取到实现该接口的所有实现类。(Spring管理的bean)
+ * 使用场景:
+ * 1. 在主程序定义接口
+ * 2. 在主程序和插件包中都存在实现该接口, 并使用Spring的组件注解(@Component、@Service)
+ * 3. 使用该方法可以获取到主程序实现该接口的实现类。
* @param aClass 类/接口的类
* @param bean 的类型
* @return List
@@ -54,6 +63,10 @@ public interface PluginUser {
/**
* 在主程序中定义的接口。获取插件中实现该接口的实现类。(Spring管理的bean)
+ * 使用场景:
+ * 1. 在主程序定义接口
+ * 2. 插件包中实现该接口, 并使用Spring的组件注解(@Component、@Service)
+ * 3. 使用该方法可以获取到插件中实现该接口的实现类(不包括主程序)。
* @param aClass 接口的类
* @param bean的类型
* @return 实现 aClass 接口的实现类的集合
@@ -62,6 +75,10 @@ public interface PluginUser {
/**
* 在主程序中定义的接口。获取指定插件中实现该接口的实现类。(Spring管理的bean)
+ * 使用场景:
+ * 1. 在主程序定义接口
+ * 2. 插件包中实现该接口, 并使用Spring的组件注解(@Component、@Service)
+ * 3. 使用该方法可以获取到指定插件中实现该接口的实现类。
* @param pluginId 插件id
* @param aClass 接口的类
* @param bean的类型
@@ -70,7 +87,11 @@ public interface PluginUser {
List getPluginBeans(String pluginId, Class aClass);
/**
- * 得到插件扩展接口实现的bean。(非Spring管理)
+ * 使用场景:
+ * 1. 在主程序定义接口(该接口需要继承 ExtensionPoint 接口)。
+ * 2. 插件包中实现该接口
+ * 3. 在主程序可以使用该方法获取到实现该接口的实现类。(实现类可以配合 @Extension 控制顺序)
+ * 注意: 该场景用于非Spring管理的bean, 使用Spring注解无效
* @param tClass bean的类型
* @param bean的类型
* @return List
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoadFactory.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoadFactory.java
index d715bce00d44c2f42dd80393cf240578785c44f6..b7f7fe29a2944a1b36c06b6214caf6958dd74bce 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoadFactory.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoadFactory.java
@@ -1,15 +1,12 @@
package com.gitee.starblues.loader;
-import com.gitee.starblues.extension.AbstractExtension;
import com.gitee.starblues.extension.ExtensionFactory;
import com.gitee.starblues.loader.load.PluginClassLoader;
import com.gitee.starblues.realize.BasePlugin;
import com.gitee.starblues.utils.CommonUtils;
import com.gitee.starblues.utils.OrderPriority;
-import org.pf4j.PluginException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.core.io.Resource;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
@@ -21,13 +18,13 @@ import java.util.concurrent.ConcurrentHashMap;
* 插件资源加载者
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class PluginResourceLoadFactory {
private static final Logger LOG = LoggerFactory.getLogger(PluginResourceLoadFactory.class);
- private final Map> pluginResourceMap = new ConcurrentHashMap<>();
+ private final Map pluginResourceWrappers = new ConcurrentHashMap<>();
private final List pluginResourceLoaders = new ArrayList<>(5);
@@ -58,16 +55,15 @@ public class PluginResourceLoadFactory {
});
}
-
-
-
/**
* 加载插件类
- * @param basePlugin basePlugin
- * @throws PluginException PluginException
+ * @param basePlugin 当前插件信息
*/
- public synchronized void load(BasePlugin basePlugin) throws PluginException {
+ public synchronized void load(BasePlugin basePlugin) {
for (PluginResourceLoader pluginResourceLoader : pluginResourceLoaders) {
+ if(pluginResourceLoader == null){
+ continue;
+ }
String key = pluginResourceLoader.key();
if(StringUtils.isEmpty(key)){
LOG.error("pluginResourceLoader {} key is empty, skip!",
@@ -75,24 +71,45 @@ public class PluginResourceLoadFactory {
continue;
}
try {
- List resources = pluginResourceLoader.load(basePlugin);
- if(resources != null){
- pluginResourceMap.put(key, resources);
+ ResourceWrapper resourceWrapper = pluginResourceLoader.load(basePlugin);
+ if(resourceWrapper != null){
+ pluginResourceWrappers.put(key, resourceWrapper);
}
- } catch (Exception e) {
- e.printStackTrace();
- throw new PluginException(e.getMessage());
+ } catch (Exception e){
+ LOG.error("Plugin resource loader '{}' load error. {}", key, e.getMessage(), e);
}
+
}
}
+ /**
+ * 卸载加载者加载的资源
+ * @param basePlugin 当前插件信息
+ */
+ public synchronized void unload(BasePlugin basePlugin) {
+ for (PluginResourceLoader pluginResourceLoader : pluginResourceLoaders) {
+ if(pluginResourceLoader == null){
+ continue;
+ }
+ String key = pluginResourceLoader.key();
+ try {
+ ResourceWrapper resourceWrapper = pluginResourceWrappers.get(key);
+ pluginResourceLoader.unload(basePlugin, resourceWrapper);
+ } catch (Exception e){
+ LOG.error("Plugin resource loader '{}' unload error. {}", key, e.getMessage(), e);
+ }
+ }
+ }
+
+
+
/**
* 根据资源加载者的key获取插件资源
* @param key key
- * @return List
+ * @return ResourceWrapper
*/
- public List getPluginResources(String key) {
- return pluginResourceMap.get(key);
+ public ResourceWrapper getPluginResources(String key) {
+ return pluginResourceWrappers.get(key);
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoader.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoader.java
index 21aac94231a0e0aaef65a5d68aeacc6c41cfacac..567d748f8454ccb4d7571848511f9cee9ad47f04 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoader.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResourceLoader.java
@@ -10,7 +10,7 @@ import java.util.List;
* 插件资源加载者统一定义的接口
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public interface PluginResourceLoader {
@@ -23,11 +23,20 @@ public interface PluginResourceLoader {
/**
* 加载资源
- * @param basePlugin basePlugin
- * @return List
+ * @param basePlugin 插件对象
+ * @return 资源包装对象
* @throws Exception Exception
*/
- List load(BasePlugin basePlugin) throws Exception;
+ ResourceWrapper load(BasePlugin basePlugin) throws Exception;
+
+ /**
+ * 卸载时的操作
+ * @param basePlugin 插件对象
+ * @param resourceWrapper 资源包装者
+ * @throws Exception 卸载异常
+ */
+ void unload(BasePlugin basePlugin, ResourceWrapper resourceWrapper) throws Exception;
+
/**
* 执行顺序
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/ResourceWrapper.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/ResourceWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..74749ffc3cd33a53cbb6b68baf432d538a9cc531
--- /dev/null
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/ResourceWrapper.java
@@ -0,0 +1,53 @@
+package com.gitee.starblues.loader;
+
+import org.springframework.core.io.Resource;
+
+import java.util.*;
+
+/**
+ * 资源包装类
+ *
+ * @author zhangzhuo
+ * @version 2.2.0
+ */
+public class ResourceWrapper {
+
+ private final List resources;
+ private final Map extensions = new HashMap<>();
+
+
+ public ResourceWrapper() {
+ this.resources = new ArrayList<>(0);
+ }
+
+ public ResourceWrapper(List resources) {
+ if(resources == null){
+ this.resources = new ArrayList<>(0);
+ } else {
+ this.resources = resources;
+ }
+ }
+
+ public ResourceWrapper(Resource[] resources) {
+ if(resources != null){
+ this.resources = Arrays.asList(resources);
+ } else {
+ this.resources = new ArrayList<>(0);
+ }
+ }
+
+ public List getResources(){
+ return resources;
+ }
+
+
+ public void addExtension(String key, Object value) {
+ extensions.put(key, value);
+ }
+
+ public Object getExtension(String key){
+ return extensions.get(key);
+ }
+
+
+}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java
index 08b1efe6d325edb6628a09c9083d37b8cc92c0b0..6b6e87baf18e0b0c85482448b9264213b05e54ba 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java
@@ -1,6 +1,7 @@
package com.gitee.starblues.loader.load;
import com.gitee.starblues.loader.PluginResourceLoader;
+import com.gitee.starblues.loader.ResourceWrapper;
import com.gitee.starblues.realize.BasePlugin;
import com.gitee.starblues.utils.OrderExecution;
import com.gitee.starblues.utils.OrderPriority;
@@ -17,7 +18,7 @@ import java.util.List;
* 插件类文件加载者
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class PluginClassLoader implements PluginResourceLoader {
@@ -29,7 +30,7 @@ public class PluginClassLoader implements PluginResourceLoader {
}
@Override
- public List load(BasePlugin basePlugin) throws Exception{
+ public ResourceWrapper load(BasePlugin basePlugin) throws Exception{
String scanPackage = basePlugin.scanPackage();
String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
ClassUtils.convertClassNameToResourcePath(scanPackage) +
@@ -38,9 +39,14 @@ public class PluginClassLoader implements PluginResourceLoader {
new PathMatchingResourcePatternResolver(basePlugin.getWrapper().getPluginClassLoader());
Resource[] resources = resourcePatternResolver.getResources(packageSearchPath);
if(resources == null){
- return Collections.emptyList();
+ return new ResourceWrapper();
}
- return Arrays.asList(resources);
+ return new ResourceWrapper(resources);
+ }
+
+ @Override
+ public void unload(BasePlugin basePlugin, ResourceWrapper resourceWrapper) throws Exception {
+ // Do nothing
}
@Override
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginConfigFileLoader.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginConfigFileLoader.java
index cf4671875f466bf5f3ce3e89607f61acbbd9e006..5f2bdc21c82d8f8d15771f60ef8270a3b04ae1ae 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginConfigFileLoader.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginConfigFileLoader.java
@@ -1,6 +1,7 @@
package com.gitee.starblues.loader.load;
import com.gitee.starblues.loader.PluginResourceLoader;
+import com.gitee.starblues.loader.ResourceWrapper;
import com.gitee.starblues.realize.BasePlugin;
import com.gitee.starblues.utils.OrderExecution;
import com.gitee.starblues.utils.OrderPriority;
@@ -17,7 +18,7 @@ import java.util.List;
* 插件配置文件加载者
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class PluginConfigFileLoader implements PluginResourceLoader {
@@ -40,7 +41,7 @@ public class PluginConfigFileLoader implements PluginResourceLoader {
}
@Override
- public List load(BasePlugin basePlugin) throws Exception {
+ public ResourceWrapper load(BasePlugin basePlugin) throws Exception {
Resource resource;
if(runtimeMode == RuntimeMode.DEVELOPMENT){
// 开发环境下
@@ -54,7 +55,12 @@ public class PluginConfigFileLoader implements PluginResourceLoader {
}
List resources = new ArrayList<>();
resources.add(resource);
- return resources;
+ return new ResourceWrapper(resources);
+ }
+
+ @Override
+ public void unload(BasePlugin basePlugin, ResourceWrapper resourceWrapper) throws Exception {
+ // Do nothing
}
@Override
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/realize/BasePlugin.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/realize/BasePlugin.java
index 0d1e8917933ad693a4a9ff84ee7afaac38128cdc..40683ba70ac8cb083095d371742a11ba63b4c324 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/realize/BasePlugin.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/realize/BasePlugin.java
@@ -2,13 +2,12 @@ package com.gitee.starblues.realize;
import com.gitee.starblues.loader.PluginResourceLoadFactory;
import org.pf4j.Plugin;
-import org.pf4j.PluginException;
import org.pf4j.PluginWrapper;
/**
* 插件包要继承的抽象类
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public abstract class BasePlugin extends Plugin {
@@ -21,45 +20,47 @@ public abstract class BasePlugin extends Plugin {
@Override
- public final void start() throws PluginException {
- pluginResourceLoadFactory.load(this);
+ public final void start() {
+ try {
+ startEvent();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ pluginResourceLoadFactory.load(this);
+ }
}
@Override
- public final void delete() throws PluginException {
- deleteEvent();
+ public final void delete() {
+ try {
+ deleteEvent();
+ } catch (Exception e){
+ e.printStackTrace();
+ } finally {
+ pluginResourceLoadFactory.unload(this);
+ }
+
}
@Override
public final void stop() {
- stopEvent();
+ try {
+ stopEvent();
+ } catch (Exception e){
+ e.printStackTrace();
+ } finally {
+ pluginResourceLoadFactory.unload(this);
+ }
}
-
- /**
- * 启动事件
- * @throws PluginException PluginException
- */
- protected abstract void startEvent() throws PluginException;
-
- /**
- * 删除事件
- * @throws PluginException PluginException
- */
- protected abstract void deleteEvent() throws PluginException;
-
- /**
- * 停止事件
- */
- protected abstract void stopEvent();
-
/**
* 扫描包。默认为当前类包名。可重写自定义包名
* @return 包名
*/
public String scanPackage(){
- return this.getCurrentPackageName();
+ // 获取当前实现类的包名
+ return this.getClass().getPackage().getName();
}
@@ -71,12 +72,20 @@ public abstract class BasePlugin extends Plugin {
return pluginResourceLoadFactory;
}
+
/**
- * 获取当前实现类的包名
- * @return 包名
+ * 启动事件. Spring 容器都没有准备。无法使用注入。
*/
- private String getCurrentPackageName(){
- return this.getClass().getPackage().getName();
- }
+ protected abstract void startEvent();
+
+ /**
+ * 删除事件. 在插件删除时触发。
+ */
+ protected abstract void deleteEvent();
+
+ /**
+ * 停止事件. 在插件停止时触发。
+ */
+ protected abstract void stopEvent();
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/GlobalRegistryInfo.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/GlobalRegistryInfo.java
index d31114ad3a5c6e891e72f7be3c2b4bfa1604be53..0522ca06c8859de2a9e2613bc89be49c73d1c3ce 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/GlobalRegistryInfo.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/GlobalRegistryInfo.java
@@ -1,6 +1,8 @@
package com.gitee.starblues.utils;
+import com.gitee.starblues.integration.IntegrationConfiguration;
+
import java.util.HashMap;
import java.util.Map;
@@ -8,14 +10,12 @@ import java.util.Map;
* 全局注册信息
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public final class GlobalRegistryInfo {
private GlobalRegistryInfo(){}
-
-
/**
* 全局插件安装次数
*/
@@ -27,10 +27,11 @@ public final class GlobalRegistryInfo {
private static Map extensionMap = new HashMap<>();
-
/**
* 添加操作插件信息
* @param pluginId 插件id
+ * @param operatorType 操作类型
+ * @param isLock 是否加锁
*/
public static synchronized void addOperatorPluginInfo(String pluginId,
PluginOperatorInfo.OperatorType operatorType,
@@ -45,6 +46,11 @@ public final class GlobalRegistryInfo {
}
+ /**
+ * 设置操作插件的信息
+ * @param pluginId 插件id
+ * @param isLock 是否加锁
+ */
public static synchronized void setOperatorPluginInfo(String pluginId, boolean isLock){
PluginOperatorInfo operatorPluginInfo = operatorPluginInfos.get(pluginId);
if(operatorPluginInfo != null){
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginOperatorInfo.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginOperatorInfo.java
index 9f7d07eb17245b1855f85f83c09650d83e22c4ec..f503465030a931f1e08fbca3eeff09a79df2e68a 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginOperatorInfo.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/PluginOperatorInfo.java
@@ -6,7 +6,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* 操作插件信息。为了解决连续上传安装后, 停止后, 无法启动的问题。
*
* @author zhangzhuo
- * @version 1.0
+ * @version 2.2.0
*/
public class PluginOperatorInfo {