微服务架构之Spring Boot(十六)

2022-04-07 19:56:32 浏览数 (1)

20.2自动重启

只要类路径上的文件发生更改,使用 spring-boot-devtools 的应用程序就会自动重新启动。在IDE中工作时,这可能是一个有用的功能,因为

它为代码更改提供了非常快速的反馈循环。默认情况下,将监视类路径上指向文件夹的任何条目的更改。请注意,某些资源(如静态资产和视图

模板)无需重新启动应用程序。

触发重启

由于DevTools监视类路径资源,因此触发重新启动的唯一方法是更新类路径。导致更新类路径的方式取决于您使用的IDE。在Eclipse中,

保存修改后的文件会导致更新类路径并触发重新启动。在IntelliJ IDEA中,构建项目( Build -> Build Project )具有相同的效果。

只要启用了分叉,您也可以使用支持的构建插件(Maven和Gradle)启动应用程序,因为DevTools需要一个独立的应用程序类加

载器才能正常运行。默认情况下,Gradle和Maven在类路径上检测到DevTools时会这样做。

与LiveReload一起使用时,自动重启非常有效。有关详细信息,请参阅LiveReload部分。如果使用JRebel,则禁用自动重新启动

以支持动态类重新加载。其他devtools功能(例如LiveReload和属性覆盖)仍然可以使用。

DevTools依赖于应用程序上下文的关闭钩子来在重启期间关闭它。如果禁用了关闭挂钩

( SpringApplication.setRegisterShutdownHook(false) ),它将无法正常工作。

在确定类路径上的条目是否应在更改时触发重新启动时,DevTools会自动忽略名

为 spring-boot , spring-boot-devtools , spring-boot-autoconfigure , spring-boot-actuator 和 spring-boot-starter 的

项目。

DevTools需要自定义 ApplicationContext 使用的 ResourceLoader 。如果您的应用程序已经提供了一个,它将被包装。不支持

直接覆盖 ApplicationContext 上的 getResource 方法。

重新启动vs Reload

Spring Boot提供的重启技术使用两个类加载器。不更改的类(例如,来自第三方jar的类)将加载到基 类加载器中。您正在积极开发的类

将加载到重新启动的 类加载器中。重新启动应用程序时,将重新启动重新启动的类加载器并创建一个新的类加载器。这种方法意味着应用

程序重新启动通常比“冷启动”快得多,因为基本类加载器已经可用并已填充。

如果您发现重新启动对于您的应用程序来说不够快或遇到类加载问题,您可以考虑从ZeroTurnaround 重新加载JRebel等技术 。这些工作

通过在加载类时重写类以使它们更适合重新加载。

0 人点赞