concept icon indicating copy to clipboard operation
concept copied to clipboard

无法更新jar包中的配置文件

Open qiecuo opened this issue 2 years ago • 3 comments

您好,我最近在使用您的动态加载外部类的项目时遇到一个问题想请教您一下,场景是让项目去读取指定目录下的jar包,然后解析jar包里面的yaml文件,然后再根据配置文件去用jar包里面的类生成实例,在这种情况下我发现,当jar包名相同,里面的配置文件不同的时候,如果上传->删除->再上传,这个时候在@OnPluginExtract方法里面解析的配置时候还会是第一次上传的配置文件,好像相同名的jar包只会解析一次。我的测试系统是ubuntu18.04,jdk为1.8。同时我也测试了在Windows下运行的时候则不会出现这个问题

qiecuo avatar Jun 09 '23 02:06 qiecuo

您好,我最近在使用您的动态加载外部类的项目时遇到一个问题想请教您一下,场景是让项目去读取指定目录下的jar包,然后解析jar包里面的yaml文件,然后再根据配置文件去用jar包里面的类生成实例,在这种情况下我发现,当jar包名相同,里面的配置文件不同的时候,如果上传->删除->再上传,这个时候在@OnPluginExtract方法里面解析的配置时候还会是第一次上传的配置文件,好像相同名的jar包只会解析一次。我的测试系统是ubuntu18.04,jdk为1.8。同时我也测试了在Windows下运行的时候则不会出现这个问题

我现在手边暂时没有ubuntu18.04的环境,如果可以的话最好能放一下大致的代码,我用Mac测试没有发现问题

你提到win环境下面没有问题,所以猜测可能是java中的系统文件监控WatchService的问题

如果你是用WatchServicePluginAutoLoader的话,添加PluginLoadLogger,看删除文件的时候,有没有输出

Plugin >> Unload JarPlugin(xxx)

之类的日志

另外,可以尝试手动调用JarPluginConceptunload(文件路径)load(文件路径)方法来卸载插件和加载插件,看是否存在同样的问题

Linyuzai avatar Jun 09 '23 04:06 Linyuzai

是有打印卸载日志的,手动unload和load也是一样的问题,就好像像根据jar名相关的参数缓存了jar文件一样,新增的时候也不会覆盖,目前的解决方法就是文件名后面加时间,确保每次上传的jar包名不一样这样

qiecuo avatar Jun 09 '23 05:06 qiecuo

是有打印卸载日志的,手动unload和load也是一样的问题,就好像像根据jar名相关的参数缓存了jar文件一样,新增的时候也不会覆盖,目前的解决方法就是文件名后面加时间,确保每次上传的jar包名不一样这样

了解了,我用ubuntu试一下

Linyuzai avatar Jun 09 '23 06:06 Linyuzai