20.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
属性时,服务器组件将自动启用。客户端组件必须手启用。
20.5.1、运行远程客户端应用
假设远程客户端应用运行在 IDE 中。您需要在与要连接的远程项目相同的 classpath 下运行 org.springframework.boot.devtools.RemoteSpringApplication
。把要连接的远程 URL 作为必须参数传入。
例如,如果您使用的是 Eclipse 或 STS,并且有一个名为 my-app
的项目已部署到了 Cloud Foundry,则可以执行以下操作:
- 在
Run
菜单中选择选择Run Configurations...
。 - 创建一个新的
Java Application
launch configuration。 - 浏览
my-app
项目。 - 使用
org.springframework.boot.devtools.RemoteSpringApplication
作为主类。 - 将
https://myapp.cfapps.io
作为程序参数
(或者任何远程 URL)传入。
运行的远程客户端将如下所示:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: 2.1.1.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.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)
注意
由于远程客户端与实际应用使用的是同一个 classpath,因此可以直接读取应用的 properties。这也是
spring.devtools.remote.secret
属性为什么能被读取和传递给服务器进行身份验证的原因。
提示
建议使用
https://
作为连接协议,以便加密传输并防止密码被拦截。
提示
如果您需要通过代理来访问远程应用,请配置
spring.devtools.remote.proxy.host
和spring.devtools.remote.proxy.port
属性。
20.5.2、远程更新
远程客户端使用了与本地重启相同的方式来监控应用 classpath 下发生的更改。任何更新的资源将被推送到远程应用和触发重启(如果要求)。如果您正在迭代一个使用了本地没有的云服务的功能,这可能会非常有用。通常远程更新和重启比完全重新构建和部署的周期要快得多。
注意
文件只有在远程客户端运行时才被监控。如果您在启动远程客户端之前更改了文件,文件将不会被推送到远程服务器。