Skip to content

hodor007/hotLoading

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hotLoading

spring 热加载

概述:

目前的功能可以自动监控文件的修改,只能支持接口实现类的热加载,类似testService的实现类testServiceImpl,并能够实现spring自动注入,然后修改其他引用这个对象的对象的属性,比如某个controller层注入了这个对象testService。注意:如果实现类中用到了@Transactional注解等,会热加载失败,因为此类注解使用了动态加载。

使用步骤:

1.将以上四个文件放入项目中 1)FileWatcher:文件监听类,系统启动时开启线程监听,利用jdk的WatchService来监听,然后动态加载变化的类; 2)SelfClassload:自定义加载类,由于jvm会缓存之前加载过得类,所以需要自定义加载类重新加载,主要重写了ClassLoader的findClass,手动读取文件的字节码,生成class文件,注意,虽然新生成的class文件和之前加载器加载的文件名字一样,但由于加载器不同,而对象不同,但是可以用同一个接口结束,比如上面提到的testService,这就是目前只能支持接口实现类的热加载的原因,因为如果没有同一个接口会报类型转换失败; 3)LocalProcessor:注入类,把旧对象从spring中移除,重新加载新的对象 4)application.yml:配置文件,主要加了两个属性,一个是热加载的启动开关,一个是需要热加载的目录

2.将配置文件中的开关打开,直接启动项目就好了,文件发生变化就会自动加载了

问题和现状:

前面也说了因为受到了jvm加载器的限制,目前只能支持接口实现类的热加载,如果各位观众老爷有更好的想法和建议欢迎留言,谢谢。

其他热加载方法:

另一种我目前在用方法的就是jrebel插件,几乎适用于任何场景的热加载,没有我上述的局限性,就是感觉他热加载的速度有点小慢。。。安装方法:https://blog.csdn.net/weixin_42831477/article/details/82229436

Releases

No releases published

Packages

No packages published

Languages