zoukankan      html  css  js  c++  java
  • 在SpringBoot中使用热部署(DevTools)


    ### 一、简介

      有时候我们开发完SpringBoot项目后,启动运行。但是经常发现代码需要反复修改,然后修改部分内容后需要再启动,这样太费时了,热部署就是用来解决这一问题。让你修改完代码后,能自动执行编译并运行。


    ### 二、使用SpringBoot的devtools实现热部署

    Devtools的原理

      深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
      spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是热部署。该模块在完整的打包环境下运行的时候会被禁用。如果你使用 java -jar启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。

    1.修改pom文件

    加入spring-boot-devtools依赖和spring-boot-maven-plugin插件

    <dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-devtools</artifactId>
    	</dependency>
    </dependencies>
    
    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-maven-plugin</artifactId>
    			<configuration>
    				<fork>true</fork>
    			</configuration>
    		</plugin>
    	</plugins>
    </build>
    

    #### 2.修改idea配置

    当我们修改了Java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译。

    (1)依次点开菜单 【File】->【Settings】->【Build,Execution,Deployment】->【Compiler】: 勾选右侧的【Build project automatically】

    (2)按下Ctrl+Shift+A,打开搜索,输入registry,并打开搜索到的该项设置

    (3)找到compiler.automake.allow.when.app.running项,并打勾

    (4)重启IDEA


    3.修改项目配置文件 (可忽略)

    在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。在SprintApplication.run之前调用System.setProperty("spring.devtools.restart.enabled", "false");可以完全关闭重启支持。

    #热部署生效
    spring.devtools.restart.enabled: true
    #设置重启的目录
    spring.devtools.restart.additional-paths: src/main/java
    #classpath目录下的WEB-INF文件夹内容修改不重启
    spring.devtools.restart.exclude: WEB-INF/**
    

    注:关于devtools可以自定义很多属性,达到自定义效果。


    4.测试

    • 修改类–>保存:应用会重启
    • 修改配置文件–>保存:应用会重启
    • 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)
  • 相关阅读:
    IDEA 启动项目报错 Error:java: java.lang.OutOfMemoryError: GC overhead limit exceeded
    JetBrains 里不为人知的秘密(8) -- 插件篇
    ant-design-vue 之upload 文件上传
    PHP获取IPv4地址
    监控制定程序的CPU和内存开销
    Python字符串转bool函数
    JetsonNano国内环境配置
    局域网主机定时ping实现监控
    无root权限crontab间接实现守护进程
    2020/3/31
  • 原文地址:https://www.cnblogs.com/kancy/p/11691537.html
Copyright © 2011-2022 走看看