[翻译]SpringBoot系列-Spring Boot 参考2

本文翻译自:http://docs.spring.io/spring-boot/docs/2.0.0.M2/reference/htmlsingle/

20.3 动态载入

spring-boot-devtools模块包含了嵌入式的动态重载服务器,在资源更新时能触发浏览器刷新。动态载入浏览器对chrome,firefox和safari是可用的。

如果你在启动应用时不想启动动态载入服务器,可以设定spring.devtools.livereload.enabledfalse

注意:你一次只能运行一个动态载入服务器。在你的应用启动之前,确认没有其他的动态载入服务器在运行。如果你在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.ioProgram 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.hostspring.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弹性执行器:生产准备功能”。

你可能感兴趣的:([翻译]SpringBoot系列-Spring Boot 参考2)