Spring Boot(2.1.6.RELEASE) 开发人员工具devtools

spring-boot-devtools

Spring Boot包含一组额外的工具,可以使应用程序开发体验更加愉快。该spring-boot-devtools模块可以包含在任何项目中,在开发期间以提供额外的功能。要包含devtools支持,请将模块依赖项添加到您的构建中,如以下Maven和Gradle列表所示:

  • Maven

    <dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-devtools</artifactId>
    		<optional>true</optional>
    	</dependency>
    </dependencies>
    
  • Gradle

    configurations {
    	developmentOnly
    	runtimeClasspath {
    		extendsFrom developmentOnly
    	}
    }
    dependencies {
    	developmentOnly("org.springframework.boot:spring-boot-devtools")
    }
    

默认值设置

Spring Boot支持的几个依赖通过使用缓存来提高性能。例如,模板引擎缓存已编译的模板以避免重复解析模板文件。此外,Spring MVC可以在提供静态资源时为响应添加HTTP缓存标头。

虽然缓存在生产中非常有用,但在开发过程中可能会适得其反,无法看到刚刚在应用程序中进行的更改。因此,spring-boot-devtools默认禁用缓存选项。

缓存选项通常由application.properties文件中的设置配置。例如,Thymeleaf提供该spring.thymeleaf.cache属性。该spring-boot-devtools模块不需要手动设置这些属性,而是在开发时自动进行合理的配置。

因为在开发Spring MVC和Spring Web Flux应用程序时需要有关Web请求的更多信息,所以开发人员工具将启用DEBUG日志web 记录组的日志记录。这将为您提供传入请求,处理程序正在处理它,响应结果等的信息。如果您希望记录所有请求详细信息(包括可能的敏感信息),则可以打开 spring.http.log-request-details配置属性。

目前devtools提供如下默认值:

properties.put("spring.thymeleaf.cache", "false"); //thymeleaf是个模板引擎
properties.put("spring.freemarker.cache", "false");
properties.put("spring.groovy.template.cache", "false");
properties.put("spring.velocity.cache", "false");
properties.put("spring.mustache.cache", "false"); //mustache也是个模板
properties.put("server.session.persistent", "true");
properties.put("spring.h2.console.enabled", "true"); //h2是个内存db
properties.put("spring.resources.cache-period", "0");

自动重启

开启devtools后,classpath中的文件变化会导致应用自动重启。Eclipse中保存文件即可引起classpath更新(注:需要打开自动编译),从而触发重启。
如果不使用IDE,而是通过maven或者gradle的build插件来启动应用,也可以打开spring-boot-maven-plugin的fork配置,使得应用在单独进程中打开(这会使得应用使用自己的类加载器):

<build>
 <plugins>
  <!-- 添加spring-boot的maven插件 start-->
  <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
  <fork>true</fork>
  </configuration>
  </plugin>
  <!-- 添加spring-boot的maven插件 end-->
 </plugins>
</build>

自动重启时记录变化

默认情况下,每次应用程序重新启动时,都会记录一个报告。该报告显示了在进行更改(例如添加或删除Bean以及设置配置属性)时应用程序自动配置的更改。

要禁用报告的日志记录,请设置以下属性:

spring.devtools.restart.log-condition-evaluation-delta=false

排除资源

某些资源在更改时不需要触发重启。如果要自定义这些排除项,可以使用该spring.devtools.restart.exclude属性。例如,要排除/static,/public您将设置以下属性:

spring.devtools.restart.exclude=static/**,public/**

监视其他的path

不在classpath内的path可以配置spring.devtools.restart.additionalpaths属性来增加到监视中,同时配置spring.devtools.restart.exclude可以选择这些path的变化是导致restart还是live reload。

禁用重启

  • 在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。
  • 在SprintApplication.run之前调用System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全关闭重启支持
    如果需要完全禁用重新启动支持,则需要在调用之前将spring.devtools.restart.enabled 属性设置为false,如以下示例所示:
public static void main(String[] args) {
	System.setProperty("spring.devtools.restart.enabled", "false");
	SpringApplication.run(MyApp.class, args);
}

使用触发文件

若不想每次修改都触发自动重启,可以设置spring.devtools.restart.trigger-file指向某个文件,只有更改这个文件时才触发自动重启。

Live Reload

Devtools模块包含一个嵌入的LiveReload服务器,可以在资源变化时用来触发浏览器刷新。浏览器需要在livereload.com下载安装扩展。
例如Chrome浏览器在应用商店安装LiveReload插件后,在要自动刷新的页面点击下图中图标,启动应用后更新页面内容或者css等都会触发页面自动刷新。

全局设置

可以在$HOME路径下创建 .spring-boot-devtools.properties 文件,来包含所有使用了devtools的sprint boot应用都会使用的全局属性。例如,可以在文件中配置全局的trigger file:

~/.spring-boot-devtools.properties
spring.devtools.reload.trigger-file=.reloadtrigger

远程应用程序

Spring Boot开发人员工具并不局限于本地开发。在运行远程应用程序时,还可以使用几个特性。远程支持opt-in。要启用它,您需要确保重新打包的归档文件中包含devtools,如下面的清单所示:

<build> 
	<plugins> 
		<plugin> 
			<groupId> org.springframework.boot </ groupId> 
			<artifactId> spring-boot-maven-plugin </ artifactId> 
			<configuration> 
				<excludeDevtools> false </ excludeDevtools> 
			</ configuration> 
		</ plugin> 
	</ plugins> 
</ build>

然后,您需要设置spring.devtools.remote.secret属性,如以下示例所示:

spring.devtools.remote.secret = mysecret

TIPS:spring-boot-devtools在远程应用程序上启用存在安全风险。永远不可在生产环境上启用。

运行远程客户端应用程序

远程客户端应用程序设计为在IDE中运行。需要使用org.springframework.boot.devtools.RemoteSpringApplication使用与连接到的远程项目相同的类路径运行 。应用程序的单个必需参数是它连接的远程URL。

例如,如果您正在使用Eclipse或STS,并且您有一个名为my-app您已经部署到CloudFoundry,您将执行以下操作:

  • 选择Run Configurations…​从Run菜单。
  • 创建一个新的Java Application“启动配置”。
  • 浏览my-app项目。
  • 使用org.springframework.boot.devtools.RemoteSpringApplication作为主类。
  • 添加https://myapp.cfapps.io到Program arguments(或任何远程URL)。
示例:
进行配置

服务就是一个普通的Spring Boot Web项目,首先需要对pom.xml稍作修改,添加 < excludeDevtools > false < /excludeDevtools> 打包时保留devtools:

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <excludeDevtools>false</excludeDevtools>
    </configuration>
</plugin>

application.properties中添加安全配置

spring.devtools.remote.secret=root

root相当于密码,client和remote server之间同步代码时就使用这个密码进行校验

启动远端服务器
  • 远端服务模拟模拟在127.0.0.1:8081
  • 项目根目录mvn package打包
  • java -jar target/xxx.jar启动
  • 启动日志中有一句不一样的日志输出
启动本地服务
  • 本地服务使用idea启动在127.0.0.1:8082端口
  • 指定Main Class为org.springframework.boot.devtools.RemoteSpringApplication
  • 指定Program arguments为http://127.0.0.1:8081 即远端服务的地址
  • 启动项目

tips:

  • 如果本地与远端的spring.devtools.remote.secret配置不一致,则同步代码时会报错。
  • 不可用在生产环境!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值