代码拉取完成,页面将自动刷新
我写了一个 插件,插件作用是接收到数据库的日志,然后将消息通过websocket发送到另外一个系统,目前问题是,类加载器加载插件的时候,每次都是new UrlClassLoader,导致系统中存在多个同名类,原来的类的实例也继续存在,每次重新上传一次插件,就会多一个。能不能在加载前做一个同名类卸载的接口,在卸载中可以关闭之前的资源
/* ConvertService 接口增加 close方法 */
package org.dbsyncer.common.spi;
public interface ConvertService {
void convert(ConvertContext var1);
default void postProcessAfter(ConvertContext context) {
}
default String getVersion() {
return "1.0.0";
}
default String getName() {
return this.getClass().getSimpleName();
}
default void close() {
}
}
org.dbsyncer.plugin.PluginFactory#loadPlugin
/**
* SPI, 扫描jar扩展接口实现,注册为本地服务
*
* @param jar
*/
private void loadPlugin(File jar) {
try {
String fileName = jar.getName();
URL url = jar.toURI().toURL();
URLClassLoader loader = new URLClassLoader(new URL[] {url}, Thread.currentThread().getContextClassLoader());
ServiceLoader<ConvertService> services = ServiceLoader.load(ConvertService.class, loader);
for (ConvertService s : services) {
String className = s.getClass().getName();
/*增加一个销毁注销接口*/
if (service.containsKey(className)) {
try {
ConvertService convertService = service.get(className);
convertService.close();
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
service.put(className, s);
plugins.add(new Plugin(s.getName(), className, s.getVersion(), fileName));
logger.info("{}, {}_{} {}", fileName, s.getName(), s.getVersion(), className);
}
} catch (MalformedURLException e) {
logger.error(e.getMessage());
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论