Skip to content

Commit 88171f3

Browse files
committed
add preload
1 parent 916ba73 commit 88171f3

File tree

17 files changed

+263
-56
lines changed

17 files changed

+263
-56
lines changed

bom-manager/exp-third-bom/pom.xml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,26 @@
4040
<artifactId>javassist</artifactId>
4141
<version>3.29.2-GA</version>
4242
</dependency>
43+
<dependency>
44+
<groupId>org.mapstruct</groupId>
45+
<artifactId>mapstruct</artifactId>
46+
<version>1.5.5.Final</version>
47+
</dependency>
48+
<dependency>
49+
<groupId>org.mapstruct</groupId>
50+
<artifactId>mapstruct-processor</artifactId>
51+
<version>1.5.5.Final</version>
52+
</dependency>
53+
<dependency>
54+
<groupId>org.projectlombok</groupId>
55+
<artifactId>lombok-mapstruct-binding</artifactId>
56+
<version>0.2.0</version>
57+
</dependency>
58+
<dependency>
59+
<groupId>cglib</groupId>
60+
<artifactId>cglib</artifactId>
61+
<version>2.2.2</version>
62+
</dependency>
4363
<dependency>
4464
<groupId>junit</groupId>
4565
<artifactId>junit</artifactId>
@@ -49,4 +69,25 @@
4969
</dependencies>
5070
</dependencyManagement>
5171

72+
<build>
73+
<plugins>
74+
<plugin>
75+
<groupId>org.apache.maven.plugins</groupId>
76+
<artifactId>maven-compiler-plugin</artifactId>
77+
<version>3.5.1</version>
78+
<configuration>
79+
<source>1.8</source>
80+
<target>1.8</target>
81+
<annotationProcessorPaths>
82+
<path>
83+
<groupId>org.mapstruct</groupId>
84+
<artifactId>mapstruct-processor</artifactId>
85+
<version>1.5.5.Final</version>
86+
</path>
87+
</annotationProcessorPaths>
88+
</configuration>
89+
</plugin>
90+
</plugins>
91+
</build>
92+
5293
</project>

example/example-springboot2/src/main/java/cn/think/in/java/open/exp/adapter/springboot2/BaseController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,18 @@ public String run(String tenantId) {
7777
}
7878
}
7979

80+
@RequestMapping("/preload")
81+
public Plugin preload(String path) throws Throwable {
82+
if (path.startsWith("http")) {
83+
File tempFile = File.createTempFile("exp-" + UUID.randomUUID(), ".jar");
84+
HttpFileDownloader.download(path, tempFile.getAbsolutePath());
85+
path = tempFile.getAbsolutePath();
86+
}
87+
88+
return expAppContext.preLoad(new File(path));
89+
}
90+
91+
8092

8193
@RequestMapping("/install")
8294
public String install(String path, String tenantId) throws Throwable {
@@ -85,6 +97,7 @@ public String install(String path, String tenantId) throws Throwable {
8597
HttpFileDownloader.download(path, tempFile.getAbsolutePath());
8698
path = tempFile.getAbsolutePath();
8799
}
100+
88101
Plugin plugin = expAppContext.load(new File(path));
89102

90103
sortMap.put(plugin.getPluginId(), Math.abs(new Random().nextInt(100)));

open-exp-code/open-exp-classloader-container-impl/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
<groupId>cn.think.in.java</groupId>
5252
<artifactId>open-exp-classloader-container</artifactId>
5353
</dependency>
54+
<dependency>
55+
<groupId>org.slf4j</groupId>
56+
<artifactId>slf4j-api</artifactId>
57+
</dependency>
5458
</dependencies>
5559

60+
5661
</project>

open-exp-code/open-exp-classloader-container-impl/src/main/java/cn/think/in/java/open/exp/classloader/impl/PluginMetaServiceImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package cn.think.in.java.open.exp.classloader.impl;
22

3-
import cn.think.in.java.open.exp.classloader.ExpClass;
4-
import cn.think.in.java.open.exp.classloader.PluginMetaConfig;
5-
import cn.think.in.java.open.exp.classloader.PluginMetaFat;
6-
import cn.think.in.java.open.exp.classloader.PluginMetaService;
3+
import cn.think.in.java.open.exp.classloader.*;
74
import cn.think.in.java.open.exp.classloader.support.ClassLoaderFinder;
85
import cn.think.in.java.open.exp.classloader.support.DirectoryCleaner;
96
import cn.think.in.java.open.exp.classloader.support.MetaConfigReader;
@@ -57,6 +54,13 @@ public void setConfig(PluginMetaConfig pluginMetaConfig) {
5754
this.pluginMetaConfig = pluginMetaConfig;
5855
}
5956

57+
@Override
58+
public PluginMetaThin parse(File file) {
59+
PluginMetaInnerModel meta = MetaConfigReader.getMeta(file);
60+
return meta.conv();
61+
}
62+
63+
6064
@Override
6165
public PluginMetaFat install(File file) throws Throwable {
6266
PluginMetaInnerModel meta = MetaConfigReader.getMeta(file);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package cn.think.in.java.open.exp.classloader.support;
2+
3+
import cn.think.in.java.open.exp.client.ConfigSupport;
4+
import cn.think.in.java.open.exp.client.Constant;
5+
import lombok.extern.slf4j.Slf4j;
6+
7+
import java.io.File;
8+
import java.io.InputStream;
9+
import java.lang.reflect.Field;
10+
import java.net.MalformedURLException;
11+
import java.net.URL;
12+
import java.net.URLClassLoader;
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.Properties;
16+
17+
/**
18+
* @version 1.0
19+
* @Author cxs
20+
* @Description
21+
* @date 2023/8/25
22+
**/
23+
@Slf4j
24+
public class ConfigSupportClassLoader extends URLClassLoader {
25+
26+
27+
public ConfigSupportClassLoader(File url) throws MalformedURLException {
28+
super(new URL[]{url.toURL()}, Thread.currentThread().getContextClassLoader());
29+
}
30+
31+
public List<ConfigSupport> get() {
32+
33+
List<ConfigSupport> list = new ArrayList<>();
34+
try (InputStream resourceAsStream = getResourceAsStream(Constant.PLUGIN_META_FILE_NAME)) {
35+
Properties properties = new Properties();
36+
properties.load(resourceAsStream);
37+
Object name = properties.get(Constant.PLUGIN_BOOT_CLASS);
38+
Class<?> aClass = loadClass(name.toString());
39+
if (aClass != null) {
40+
for (Field field : aClass.getDeclaredFields()) {
41+
if (field.getType().equals(ConfigSupport.class)) {
42+
list.add((ConfigSupport) field.get(aClass));
43+
}
44+
}
45+
} else {
46+
log.warn(Constant.PLUGIN_BOOT_CLASS + " 是空");
47+
}
48+
} catch (Exception e) {
49+
log.error(e.getMessage(), e);
50+
}
51+
52+
return list;
53+
}
54+
}

open-exp-code/open-exp-classloader-container-impl/src/main/java/cn/think/in/java/open/exp/classloader/support/MetaConfigReader.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.think.in.java.open.exp.classloader.support;
22

3+
import cn.think.in.java.open.exp.client.ConfigSupport;
34
import cn.think.in.java.open.exp.client.Constant;
45
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
56
import org.apache.commons.compress.archivers.zip.ZipFile;
@@ -8,6 +9,7 @@
89
import java.io.IOException;
910
import java.io.InputStream;
1011
import java.util.HashMap;
12+
import java.util.List;
1113
import java.util.Map;
1214
import java.util.Properties;
1315
import java.util.jar.JarEntry;
@@ -23,13 +25,18 @@
2325
public class MetaConfigReader {
2426

2527
public static PluginMetaInnerModel getMeta(File file) {
26-
Properties properties = loadProperties(file.getAbsolutePath(), Constant.PLUGIN_META_FILE_NAME);
27-
String code = properties.getProperty(Constant.PLUGIN_CODE_KEY);
28-
String desc = properties.getProperty(Constant.PLUGIN_DESC_KEY);
29-
String version = properties.getProperty(Constant.PLUGIN_VERSION_KEY);
30-
String ext = properties.getProperty(Constant.PLUGIN_EXT_KEY);
31-
String boot = properties.getProperty(Constant.PLUGIN_BOOT_CLASS);
32-
return new PluginMetaInnerModel(code, desc, version, ext, boot);
28+
try {
29+
Properties properties = loadProperties(file.getAbsolutePath(), Constant.PLUGIN_META_FILE_NAME);
30+
String code = properties.getProperty(Constant.PLUGIN_CODE_KEY);
31+
String desc = properties.getProperty(Constant.PLUGIN_DESC_KEY);
32+
String version = properties.getProperty(Constant.PLUGIN_VERSION_KEY);
33+
String ext = properties.getProperty(Constant.PLUGIN_EXT_KEY);
34+
String boot = properties.getProperty(Constant.PLUGIN_BOOT_CLASS);
35+
List<ConfigSupport> list = new ConfigSupportClassLoader(file).get();
36+
return new PluginMetaInnerModel(code, desc, version, ext, boot, list);
37+
} catch (Exception e) {
38+
throw new RuntimeException(e);
39+
}
3340
}
3441

3542
public static Map<String, String> getMapping(File file) {

open-exp-code/open-exp-classloader-container-impl/src/main/java/cn/think/in/java/open/exp/classloader/support/PluginMetaInnerModel.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package cn.think.in.java.open.exp.classloader.support;
22

3+
import cn.think.in.java.open.exp.classloader.PluginMetaThin;
4+
import cn.think.in.java.open.exp.client.ConfigSupport;
35
import lombok.Data;
46

7+
import java.util.List;
8+
59
/**
610
* @version 1.0
711
* @Author cxs
@@ -11,9 +15,6 @@
1115
@Data
1216
public class PluginMetaInnerModel {
1317

14-
/**
15-
*
16-
*/
1718
String pluginId;
1819

1920
String pluginCode;
@@ -26,16 +27,22 @@ public class PluginMetaInnerModel {
2627

2728
String pluginBootClass;
2829

30+
List<ConfigSupport> configSupportList;
31+
2932

30-
public PluginMetaInnerModel(String pluginCode, String pluginDesc,
31-
String pluginVersion, String pluginExt,
32-
String pluginBootClass) {
33+
public PluginMetaInnerModel(String pluginCode, String pluginDesc, String pluginVersion, String pluginExt, String pluginBootClass, List<ConfigSupport> configSupportList) {
3334

3435
this.pluginId = pluginCode + UniqueNameUtil.getSplit() + pluginVersion;
3536
this.pluginCode = pluginCode;
3637
this.pluginDesc = pluginDesc;
3738
this.pluginVersion = pluginVersion;
3839
this.pluginExt = pluginExt;
3940
this.pluginBootClass = pluginBootClass;
41+
this.configSupportList = configSupportList;
4042
}
43+
44+
public PluginMetaThin conv() {
45+
return new PluginMetaThin(this.pluginId, this.pluginCode, this.pluginDesc, this.pluginVersion, this.pluginExt, this.pluginBootClass, this.configSupportList);
46+
}
47+
4148
}

open-exp-code/open-exp-classloader-container/src/main/java/cn/think/in/java/open/exp/classloader/PluginMetaFat.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,13 @@
1616
* @date 2023/8/9
1717
**/
1818
@Data
19-
public class PluginMetaFat {
20-
21-
private String pluginId;
22-
23-
private String pluginCode;
24-
25-
private String pluginDesc;
26-
27-
private String pluginVersion;
28-
29-
private String pluginExt;
30-
31-
private String pluginBootClass;
19+
public class PluginMetaFat extends PluginMetaThin {
3220

3321
private PluginObjectScanner scanner;
34-
35-
/**
36-
* 扩展点映射关系
37-
*/
3822
private Map<String, String> extensionMappings;
39-
4023
private File location;
41-
4224
private ClassLoader classLoader;
4325

44-
private List<ConfigSupport> configSupportList;
4526

4627
public Plugin conv() {
4728
Plugin plugin = new Plugin();

open-exp-code/open-exp-classloader-container/src/main/java/cn/think/in/java/open/exp/classloader/PluginMetaService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ static PluginMetaService getSpi() {
1616

1717
void setConfig(PluginMetaConfig pluginMetaConfig);
1818

19+
PluginMetaThin parse(File file);
20+
1921
PluginMetaFat install(File file) throws Throwable;
2022

2123
void unInstall(String pluginId) throws Exception;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cn.think.in.java.open.exp.classloader;
2+
3+
import cn.think.in.java.open.exp.client.ConfigSupport;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.List;
9+
10+
/**
11+
* @version 1.0
12+
* @Author cxs
13+
* @Description
14+
* @date 2023/8/25
15+
**/
16+
@Data
17+
@AllArgsConstructor
18+
@NoArgsConstructor
19+
public class PluginMetaThin {
20+
21+
protected String pluginId;
22+
23+
protected String pluginCode;
24+
25+
protected String pluginDesc;
26+
27+
protected String pluginVersion;
28+
29+
protected String pluginExt;
30+
31+
protected String pluginBootClass;
32+
33+
protected List<ConfigSupport> configSupportList;
34+
}

0 commit comments

Comments
 (0)