Spring Boot中文手册(10):常用的Spring Boot开发工具(二)
“ 该系列的文章主要参考Spring Boot 2.1.2.RELEASE的官方文档来进行翻译,逐步将官方文档翻译过来,方便大家共同学习和讨论,但是毕竟能力有限,如有问题,感谢大家留言指正。”
3. LiveReload
spring-boot-devtools
模块包含一个内嵌的LiveReload服务器,它可以在资源改变时触发浏览器刷新。LiveReload浏览器扩展可以免费从livereload.com站点获取,支持Chrome,Firefox,Safari等浏览器。
如果不想在运行应用时启动LiveReload服务器,你可以将 spring.devtools.livereload.enabled
属性设置为false。
每次只能运行一个LiveReload服务器,如果你在IDE中启动多个应用,只有第一个能够获得动态加载功能。
4. 全局设置
在 $HOME 文件夹下添加一个 .spring-boot-devtools.properties
的文件可以用来配置全局的devtools设置(注意文件名以"."开头),添加进该文件的任何属性都会应用到你机器上使用该devtools的Spring Boot应用。例如,想使用触发器文件进行重启,可以添加如下配置:
~/.spring-boot-devtools.properties.
spring.devtools.reload.trigger-file=.reloadtrigger
.spring-boot-devtools.properties中指定的profile并不会影响 profile-specific配置文件的加载
5. 远程应用
Spring Boot开发者工具并不仅限于本地开发,在运行远程应用时你也可以使用一些特性。远程支持的特性已经内置了,你只需要确保 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
在一个远程程序上启用spring-boot-devtools是有风险的,在生产环境部署的话千万不要这么做。
远程devtools支持分两部分:一个是接收连接的服务端端点,另一个是运行在IDE里的客户端应用。如果设置spring.devtools.remote.secret
属性,服务端组件会自动启用,客户端组件必须手动启动。
5.1 运行远程客户端应用
远程客户端应用程序(remote client application)设计的是需要在IDE中运行,你需要运行跟将要连接的远程应用相同的classpath的org.springframework.boot.devtools.RemoteSpringApplication
,这个程序需要的唯一参数就是你要连接的远程应用URL。
例如,你正在使用Eclipse或STS开发,并有一个部署到Cloud Foundry的my-app工程,远程连接该应用需要做以下操作:
从Run菜单选择Run Configurations…。
创建一个新的Java Application启动配置(launch configuration)。
浏览my-app工程。
将org.springframework.boot.devtools.RemoteSpringApplication
作为main类。
将https://myapp.cfapps.io作为参数传递给RemoteSpringApplication
(或其他任何远程URL)。
一个运行中的远程客户端应用程序应该类似于下面的输出:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: 2.1.2.RELEASE
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.spring[email protected]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)
因为远程客户端与真实应用使用的是相同的classpath,所以它能直接读取应用配置,这就是spring.devtools.remote.secret如何被读取,然后传递给服务器做验证的。
无论什么时候,总是建议使用https://作为连接协议,这样传输通道是加密的,密码也不会被截获。
如果你想使用代理访问你的程序,请配置 spring.devtools.remote.proxy.host 和 spring.devtools.remote.proxy.port 这两个属性。
5.2 远程更新
远程客户端会监测应用的classpath,任何更新都会推送到远程应用上并触发一次重启,如果你并没有本地调试,而是使用一个云服务来迭代开发某个特性时,这将变得非常有用。通常情况下,一次远程的更新要比一次完整的构建和部署流程快很多。
只有当远程客户端在运行时,文件才会被监控。如果你在启动远程客户端之前修改了一个文件,那么将不会被推送到远程服务上。
6. 打包你的应用,上生产
可执行的jar包可以用来作为生产级的部署。因为是完全自包含的,所以也非常适用基于云的部署。
还有一些生产级别的的特性,比如健康监控,审计和指标REST,或JMX端点,可以考虑添加 spring-boot-actuator
。具体可以该系列文章的后续内容。
正文内容从这里开始(可直接省略,亦可配图说明)。
7. 下一步该读些什么
现在大家应该都明白了如何使用Spring Boot,还有一些我们最好都遵守的最佳实践。现在我们可以更加深入地学习特定的Spring Boot特性了,或者你也可以直接跳过前半部分直接开始学习Spring Boot生产级别的特性。
END