Eclipse配置springloaded实现热部署,增加方法修改也能实时生效,比Eclipse默认的热部署更强大

1.Eclipse/Java热部署

Eclipse或者说Java,本身就支持热部署,但是功能很弱。

简单的修改文案

system.out.println("abc");

修改为

system.out.println("abcd");不用重启就能生效。

 

但是,如果增加1个方法

public void test(){

    system.out.println("abcd");

}

没能生效。

(本人本地亲测)

 

2.热部署

JFinal框架,一直在升级,听说已经搞定了热部署。

在很久以前,Java 热部署就非常火,后来降温,也没深入学习和使用。

最近学习SpringBoot等各种新知识,偶然遇到了,就再研究下。

凡是有利于提高开发效率的,都值得学习实践。

 

3.最近,在搭建自己的技术平台时,学习了一网友的文章

Spring-boot:5分钟整合Dubbo构建分布式服务

https://www.cnblogs.com/jaycekon/p/SpringBootDubbo.html

 

他的pom配置有这么一段

  
        
            org.springframework
            springloaded
            1.2.3.RELEASE
        

没用过,就百度学习使用了下。

(凡是遇到不懂的,顺手就百度,了解一下。工作时间越久,知道的就越来越多。)

 

配置以上依赖之后,Eclipse运行,Run Configuration,JVM参数增加1项配置:

-javaagent:D:\MavenRepos\org\springframework\springloaded\1.2.7.RELEASE\springloaded-1.2.7.RELEASE.jar  -noverify

就生效了。

Eclipse配置springloaded实现热部署,增加方法修改也能实时生效,比Eclipse默认的热部署更强大_第1张图片

 

4. 怎么看出 spring-loaded生效了呢?

 Eclipse,Idea或者说Java JVM,本来就一定程度上支持了“热部署”。

经常在调试的时候,修改文案,就生效了。

我是有这个疑惑的,在阅读这篇文章的时候,发现也有个网友有疑惑。

Springloaded使用方法

https://blog.csdn.net/tang86100/article/details/78772079#commentsedit

正好看到1个

 

 

测试代码

    @RequestMapping(value = "/detail")
    public Result detail(@RequestParam Integer id){
        //查询有效的
        JtnPost post=postManager.getDetailById(id);
        Result result = Result.ok().setBody(post);
        System.out.println(id);
        //test();
        return result;
    }
    
    private void test(){
        System.out.println("test");
    }

用了Spring-Loaded,来回注释 取消注释 test()实时生效,而Eclipse不行。

 

5.Spring-Loaded 热部署局限性

    @RequestMapping(value = "/detail2")
    public Result detail(@RequestParam Integer id){
        //查询有效的
        JtnPost post=postManager.getDetailById(id);
        Result result = Result.ok().setBody(post);
        System.out.println(id);
        //test();
        return result;
    }

运行过程中,url改为detail2,没有生效。

网友的观点,尚未验证:

1. 注解及其参数修改,如RequestMapping(value=”/xxx”)等;

2. 新增jar包;

3. 以及其他尚未考证的地方;

 

本工具适用以下情况:

1. Java主体代码修改、调整;

2. 非配置项bug修复;

3. 上线期间代码快速联调;

 

6.热部署的原理?为啥有局限性?

本人分析:简单的热部署,只能实时监测源文件变化,同步翻译为class文件,再重新加载。

但是,修改RequestMapping这种,这种功能比较复杂,会有很复杂的生效过程,了解Spring的应该能理解。

 

热部署,我的理解是 实时部署,局部部署。

如果变化较大,需要更换的jar等就太多了,不容易做到,所以没支持。

 

因此,小改用 热部署,大改重启。

 

参考资料:

Spring-boot:5分钟整合Dubbo构建分布式服务

https://www.cnblogs.com/jaycekon/p/SpringBootDubbo.html

Springloaded使用方法

https://blog.csdn.net/tang86100/article/details/78772079#commentsedit

eclipse配置springloaded实现热部署

https://blog.csdn.net/myb0220/article/details/50462312

基于spring-loaded的热部署

https://zxmsammy.iteye.com/blog/2344163

你可能感兴趣的:(日拱一卒)