本文翻译自:http://docs.spring.io/spring-boot/docs/2.0.0.M2/reference/htmlsingle/
20.3 动态载入
spring-boot-devtools模块包含了嵌入式的动态重载服务器,在资源更新时能触发浏览器刷新。动态载入浏览器对chrome,firefox和safari是可用的。
如果你在启动应用时不想启动动态载入服务器,可以设定spring.devtools.livereload.enabled为false。
注意:你一次只能运行一个动态载入服务器。在你的应用启动之前,确认没有其他的动态载入服务器在运行。如果你在IDE中启动了多个程序,只有第一次启动的那个服务器是正常的。
20.4 全局设定
你可以在$HOME文件夹中添加名为.spring-boot-devtools.propeties的文件,来配置全局设定(注意文件的名称前缀为".")。任何添加到这个文件的属性都会作用于在你的开发环境的springboot程序。比如,配置重启触发文件,你可以添加:
*~/.spring-boot-devtools.properties. *
spring.devtools.reload.trigger-file=.reloadtrigger
20.5 远程应用
springboot开发工具不仅仅能在本地开发。你还能使用一些远程应用的特征。远程支持是可选的,需要确认devtools包含在打包插件中。
org.springframework.boot
spring-boot-maven-plugin
false
然后你需要设定spring.devtools.remote.secret属性,比如:
spring.devtools.remote.secret=mysecret
注意:远程使用spring-boot-devtools是个冒险的决定,你应该绝对禁止在生产环境中使用。
远程devtools支持分为两部分,一部分是可连接的服务器端,一部分是在你的IDE中运行的客户端。如果spring.devtools.remote.secret被设定,那么服务器组件自动变为可用。客户端组件需要手动加入。
20.5.1运行远端客户端程序
远端客户端程序被设计在运行在你的IDE中。你需要使用相同的classpath来运行org.springframework.boot.devtools.RemoteSpringApplication,以作为你连接的远端项目。
零配置参数的应用程序应该是一个可以连接的远端URL。
比如,如果你使用Eclipse或者STS,你的项目名称叫my-app,你部署在云端,你应该做如下的工作:
- 从Run菜单中选择Run Configuration...
- 创建一个新的Java Application来启动配置
- 浏览my-app项目
- 使用org.springframework.boot.devtools.RemoteSpringApplication作为main类
- 添加https://myapp.cfapps.io到Program arguments(或者任何你的远程URL)
一个运行的远程客户端会像如下一样的展示:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: 2.0.0.M2
2015-06-10 18:25:06.632 INFO 14938 --- [ main] o.s.b.devtools.RemoteSpringApplication : Starting RemoteSpringApplication on pwmbp with PID 14938 (/Users/pwebb/projects/spring-boot/code/spring-boot-devtools/target/classes started by pwebb in /Users/pwebb/projects/spring-boot/code/spring-boot-samples/spring-boot-sample-devtools)
2015-06-10 18:25:06.671 INFO 14938 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2a17b7b6: startup date [Wed Jun 10 18:25:06 PDT 2015]; root of context hierarchy
2015-06-10 18:25:07.043 WARN 14938 --- [ main] o.s.b.d.r.c.RemoteClientConfiguration : The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2015-06-10 18:25:07.074 INFO 14938 --- [ main] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2015-06-10 18:25:07.130 INFO 14938 --- [ main] o.s.b.devtools.RemoteSpringApplication : Started RemoteSpringApplication in 0.74 seconds (JVM running for 1.105)
注意:因为远程客户端使用与实际应用程序相同的类路径,所以能直接读取到应用的属性。这也是spring.devtools.remote.secret属性读取,和通过服务器安全验证的原因。
推荐使用https://作为连接协议,这样连接是加密的,密码也不会被截获。
如果你需要使用代理来进入远程应用,配置spring.devtools.remote.proxy.host和spring.devtools.remote.proxy.port属性。
20.5.2 远程更新
远程客户端会像本地重启服务一样监控你的应用路径中的改变。任何更新资源的操作都会被推到远程应用上,然后触发重启。假如你使用云服务功能,而没有使用本地服务,这可能会非常有用。普通远程更新和重启会比全量重新构建和部署周期快很多。
注意:文件只有在远程客户端运行的情况下被监控。如果你在启动远程客户端之前改变文件,那么他不会被推送到远程服务器中。
20.5.3 远程debug隧道
当远程应用出现问题,java远程debug十分有用。不幸的是,当你的应用没有部署在你的数据中心,那么他不是经常可以远程debug。加入你使用像docker这种基于软件技术的容器,那么远程debug也会十分困难。
为了帮助解决限制,devtools支持通过http远程debug。远程客户端在8000端口提供了一个本地服务器,你能通过这个端口远程debug。一个连接被建立后,通过httpdebug远程应用。加入你想使用不同的端口,你能使用spring.devtools.remote.debug.local-port属性。
你要确认你的远程应用通过远程debug的方式启动。通常可以通过JAVA_OPTS实现。比如:在云服务器上添加你的manifest.yml:
---
env:
JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"
注意:不需要在-Xrunjdwp中设置address=NNNN。如果没有配置,那么java将会随机分配一个端口。
通过因特网debug远程服务器会很慢,你也许需要增加你的IDE的超时时间。比如,在Eclipse中,你选择Preferences...中的Java -> Debug,改变Debugger timeout (ms) 为一个可用的值(60000适合大多数情况)。
当通过IntelliJ IDEA远程debug,所有的断点必须被配置为支持线程模式而不是VM模式。默认的,在Intelli JDEA中的断点会暂停整个VM,而不是暂停触发断点的线程。远程debug的时候挂起线程信息是有副作用的,因为你的debug会话被冻结了。当使用IntelliJ IDEA的远程debug通道,所有的断点应该被配置为打断线程而不是VM。
21.在生产上打包你的应用
可执行的jar包能部署到生产上,由于它们是独立的,它们也非常适合基于云的部署。
对于其他“生产准备”功能,如健康,审计和度量REST或JMX端点;考虑添加spring-boot-actuator。有关详细信息,请参见第V部分“spring boot弹性执行器:生产准备功能”。