首页 » Spring Boot实战 » Spring Boot实战全文在线阅读

《Spring Boot实战》A.3 远程开发

关灯直达底部

在远程运行应用程序时(比如部署到服务器上或云上),开发者工具的自动重启和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"  

远程应用程序启动后,会和本地调试服务器建立一个连接。你可以设置断点,一步步执行远程应用程序里的代码,就好像它们运行在本地一样(出于网络原因,速度会有点慢)。