在远程运行应用程序时(比如部署到服务器上或云上),开发者工具的自动重启和LiveReload特性都是可选的。此外,Spring Boot开发者工具还能远程调试Spring Boot应用程序。
在传统的开发过程中,你不会打开远程开发功能,因为这会影响性能。但在一些特殊的场景中,此类工具就很有用。比如,出于开发目的,所开发的应用程序部署在非生产环境里。如果应用程序不是在本地开发环境里,而是在云端部署,则尤其如此。
你必须设置一个远程安全码来开启远程开发功能:
spring: devtools: remote: secret: myappsecret
有了这个属性后,运行中的应用程序就会启动一个服务器组件以支持远程开发。它会监听接受变更的请求,可以重启应用程序或者触发浏览器刷新。
为了使用这个远程服务器,你需要在本地运行远程开发工具的客户端。这个远程客户端是一个类,全限定类名是org.springframework.boot.devtools.RemoteSpringApplication
。它会运行在IDE里,要求提供一个参数,告知远程应用程序部署在哪里。
例如,假设你正远程运行阅读列表应用程序,部署在Cloud Foundry上,地址是https://readinglist.cfapps.io。如果你正在使用Eclipse或Spring ToolSuite,可以通过如下步骤开启远程客户端。
(1) 选择Run > Run Configurations菜单项。
(2) 创建一个新的Java Application运行配置。
(3) 在Project里选中Reading List项目(可以键入项目名或者点击Browse按钮找到这个项目,见图A-1)。
(4) 在Main Class里键入org.springframework.boot.devtools.RemoteSpringApplication
(见图A-1)。
图 A-1 RemoteSpringApplication
是远程开发者工具客户端
(5) 切换到Arguments标签页,在Program Arguments里键入https://readinglist.cfapps.io
(见图A-2)。
图 A-2 RemoteSpringApplication
将远程应用程序的URL作为参数
客户端启动后,就可以在IDE里修改应用程序了。在检测到变动后,这些修改点会被推送到远端并加以应用。如果修改的内容涉及呈现的Web资源(比如样式表或JavaScript),LiveReload还会触发浏览器刷新。
远程客户端还会开启基于HTTP的远程调试通道,这样就能在IDE里调试部署在远程的应用程序了。你要做的就是确保远程应用程序打开了远程调试功能。这通常可以通过配置JAVA_OPTS
来实现。
比方说,你的应用程序部署在Cloud Foundry上,可以像下面这样在应用程序的manifest.yml里设置JAVA_OPTS
。
--- env: JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"
远程应用程序启动后,会和本地调试服务器建立一个连接。你可以设置断点,一步步执行远程应用程序里的代码,就好像它们运行在本地一样(出于网络原因,速度会有点慢)。