使用弹簧引导DevTools实现优化开发过程

  

使用Spring Boot DevTools实现优化开发过程?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

场景再现

某日少年收到前端同学发来的消息说联调的接口响应异常,少年表现的很平静,因为这种事情太平常了。于是询问详情之后开始打开自己的代码查找问题所在,没过五分钟就发现了问题。少年修改完代码之后将本地启动的项目停止然后再重新启动。由于当前的服务端项目是一个巨大的单体应用,启动需要花三四分钟时间,于是少年就拿出手机开始刷起朋友圈。刷着刷着(由于注意力分散不知不觉花了十几分钟)突然意识到项目已经重新启动,于是通知前端同学查看效果。

分析问题

上面的场景可能对很多开发者来说感同身受,在开发中修改项目是很平常且频繁的一件事情。当我们修改完代码或其他文件的时候,我们会重新启动项目来验证修改是否真的生效(这里忽略我们编写的测试代码),以供前端或者其他客户端来使用我们的修改。但是不知不觉这样的流程浪费了我们很多时间,甚至被迫分散我们的注意力(打开社交软件、看新闻、和同事聊天),这些问题对我们的生产力是一个极大的威胁。

spring-boot-devtools

能否有一种方案可以让我们对项目的修改快速生效,从而节省那些我们本该可以利用的时间呢?幸好有一种工具可以解决当前所存在的问题,这就是**Spring Boot Dev Tools**。

原理简介

您可能会说,了解Spring Boot Dev Tools的工作原理并不重要,但是由于开发过程中存在很多复杂的情况,所以了解Spring Boot Dev Tools的工作原理是对我们有帮助的。

Spring Boot Dev Tools钩接(hooks into)到Spring Boot的类加载器中,以提供一种方法来按需重新启动应用程序上下文或重新加载已更改的静态文件而无需重新启动整个应用程序。

为此,Spring Boot Dev Tools将划分应用程序的类路径并分配给两个不同的类加载器:

  • 基本类加载器(base classloader):包含一些不可变类或者几乎不会被修改文件,例如Spring Boot JAR或第三方库。
  • 重新启动类加载器(restart classloader):包含应用程序的文件,这些文件在项目开发过程中将频繁更改

重新启动应用程序后,现有的重新启动类加载器将被丢弃,新的重新启动类加载器将被启动。这种方法意味着应用程序的重启通常比“冷启动”要快得多,因为基本类加载器没有受到影响并且一直存在着。

引入依赖

当我们使用intellij IDEA的Spring Initializr创建项目时,Spring Initializr提供了内置的Spring Boot Dev Tools依赖选项,我们只需选择它即可。

使用Spring Boot DevTools实现优化开发过程Spring Initializr中引入Spring Boot Dev Tools

Maven项目中引入Spring Boot Dev Tools

在项目的pom.xml文件中引入弹簧引导开发工具依赖即可

& lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-devtools   & lt; scope> runtime   & lt; optional> true   & lt;/dependency>

在项目中添加一个简单的控制器

@SpringBootApplication   公开课DevToolApplication {   公共静态void main (String [] args) {   SpringApplication.run (DevToolApplication.class, args);   }   @RestController   公共静态类HelloWorld {   @GetMapping (“test")   ,公共ResponseEntity<和# 63的在得到(){   返回ResponseEntity.ok(“你好world");   }   }   }

启动项目,访问http://localhost: 8080/测试,返回如下:

使用弹簧引导DevTools实现优化开发过程

我们简单修改代码

@RestController   公共静态类HelloWorld {   @GetMapping (“test")   ,公共ResponseEntity<和# 63的在得到(){   后返回ResponseEntity.ok (“hello world改变file");   }   }

运行命令mvn编译、运行完毕重新访问http://localhost: 8080/测试

使用弹簧引导DevTools实现优化开发过程

使用弹簧引导DevTools实现优化开发过程