in seatunnel-datasource/seatunnel-datasource-client/src/main/java/org/apache/seatunnel/datasource/AbstractDataSourceClient.java [223:279]
private ClassLoader getCustomClassloader(String pluginName) {
String getenv =
System.getenv(ST_WEB_BASEDIR_PATH) == null
? System.getProperty(ST_WEB_BASEDIR_PATH)
: System.getenv(ST_WEB_BASEDIR_PATH);
log.info("ST_WEB_BASEDIR_PATH is : " + getenv);
String libPath = StringUtils.isEmpty(getenv) ? "/datasource" : (getenv + "/datasource");
File jarDirectory = new File(libPath);
File[] jarFiles =
jarDirectory.listFiles(
(dir, name) -> {
String pluginUpperCase = pluginName.toUpperCase();
String nameLowerCase = name.toLowerCase();
if (pluginUpperCase.equals("KAFKA")) {
return !nameLowerCase.contains("kingbase")
&& nameLowerCase.startsWith(
DatasourceLoadConfig.classLoaderJarName.get(
pluginUpperCase));
} else {
return nameLowerCase.startsWith(
DatasourceLoadConfig.classLoaderJarName.get(
pluginUpperCase));
}
});
log.info("jar file length :" + (jarFiles == null ? 0 : jarFiles.length));
log.info(
"jar file name :"
+ (jarFiles == null
? 0
: jarFiles.length == 0 ? "no jar" : jarFiles[0].getName()));
DatasourceClassLoader customClassLoader =
DatasourceLoadConfig.datasourceClassLoaders.get(pluginName.toUpperCase());
try {
if (customClassLoader == null) {
jarFiles = jarFiles == null ? new File[0] : jarFiles;
URL[] urls = new URL[jarFiles.length];
for (int i = 0; i < jarFiles.length; i++) {
try {
urls[i] = jarFiles[i].toURI().toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
customClassLoader =
new DatasourceClassLoader(
urls, Thread.currentThread().getContextClassLoader());
DatasourceLoadConfig.datasourceClassLoaders.put(
pluginName.toUpperCase(), customClassLoader);
}
} catch (Exception e) {
e.printStackTrace();
}
log.info("custom loader is:" + customClassLoader);
return customClassLoader;
}