Spring Boot 教程

远程应用

Spring Boot 开发者工具并不仅限于本地开发,在运行远程应用时你也可以使用一些特性。远程支持是可选的,通过设置 spring.devtools.remote.secret 属性可以启用它,例如:

spring.devtools.remote.secret=mysecret

注意:在远程应用上启用 spring-boot-devtools 有一定的安全风险,生产环境中最好不要使用。

远程 devtools 支持分两部分:

  • 一个是接收连接的服务端端点

  • 另一个是运行在 IDE 里的客户端应用

如果设置 spring.devtools.remote.secret 属性,服务端组件会自动启用,客户端组件必须手动启动。

示例演示

(1)将我们的 Spring Boot 打包成可执行的 jar 文件,然后将 jar 拷贝到其他地方,笔者拷贝到桌面。然后使用 java -jar 命令启动 Spring Boot,如下:

C:\Users\Administrator\Desktop>java -jar springboot.jar
{spring.web.resources.chain.cache=false, spring.web.resources.cache.period=0}

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.0)

2020-11-21 08:23:22.707  INFO 14476 --- [           main] h.s.s.SpringbootDevtoolsDemo1Application : Starting SpringbootDevtoolsDemo1Application v0.0.1-SNAPSHOT using Java 1.8.0_45 on MS-OYCYMLXUSLLD with PID 14476 (C:\Users\Administrator\Desktop\springboot.jar started by Administrator in C:\Users\Administrator\Desktop)
2020-11-21 08:23:22.712  INFO 14476 --- [           main] h.s.s.SpringbootDevtoolsDemo1Application : No active profile set, falling back to default profiles: default
2020-11-21 08:23:22.891  INFO 14476 --- [           main] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2020-11-21 08:23:22.892  INFO 14476 --- [           main] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2020-11-21 08:23:27.228  INFO 14476 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-11-21 08:23:27.263  INFO 14476 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-11-21 08:23:27.264  INFO 14476 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.39]
2020-11-21 08:23:27.510  INFO 14476 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-11-21 08:23:27.524  INFO 14476 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4630 ms
2020-11-21 08:23:27.597  WARN 14476 --- [           main] .s.b.d.a.RemoteDevToolsAutoConfiguration : Listening for remote restart updates on /.~~spring-boot!~/restart
2020-11-21 08:23:28.067  INFO 14476 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-11-21 08:23:28.357  INFO 14476 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page template: index
2020-11-21 08:23:28.901  INFO 14476 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-11-21 08:23:28.925  INFO 14476 --- [           main] h.s.s.SpringbootDevtoolsDemo1Application : Started SpringbootDevtoolsDemo1Application in 7.349 seconds (JVM running for 8.36)

使用浏览器访问该 Spring Boot 程序,记得在浏览器上面打开 LiveReload 插件,这样当程序代码改变后可以动态刷新。

(2)记住,上面的 Spring Boot 程序是在 IDEA 外面,通过 java -jar 启动的。现在打开 IDEA 运行 org.springframework.boot.devtools.RemoteSpringApplication 类,连接到远程 Spring Boot 程序。如下:

a、找到 spring-boot-devtools 的依赖,打开找到“RemoteSpringApplication”。双击打开该类,拷贝该类的完全限定类名称 org.springframework.boot.devtools.RemoteSpringApplication,接下来会用到。如下图:

b、打开 IDEA 的“Run/Debug Configurations”,点击左上角的加号“+”创建一个新的 Application。如下图:

设置新的 Application 的配置信息,其中:Main class 输入框填写上面拷贝的 org.springframework.boot.devtools.RemoteSpringApplication 类名称;Program arguments 输入框输入 Spring Boot 的访问地址,这里是 http://127.0.0.1:8080  ,真实情况应该是一个远程 Spring Boot 地址;最后,记得选一个 module,如果不选择将会跑错。如下图:

运行我们刚刚新创建的 RemoteSpringApplication,运行日志如下:

  .   ____          _                                              __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _          ___               _      \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` |        | _ \___ _ __  ___| |_ ___ \ \ \ \
 \\/  ___)| |_)| | | | | || (_| []::::::[]   / -_) '  \/ _ \  _/ -_) ) ) ) )
  '  |____| .__|_| |_|_| |_\__, |        |_|_\___|_|_|_\___/\__\___|/ / / /
 =========|_|==============|___/===================================/_/_/_/
 :: Spring Boot Remote ::  (v2.4.0)

2020-11-21 13:29:37.825  INFO 17220 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication v2.4.0 using Java 1.8.0_45 on MS-OYCYMLXUSLLD with PID 17220 (D:\repository\maven\org\springframework\boot\spring-boot-devtools\2.4.0\spring-boot-devtools-2.4.0.jar started by Administrator in D:\learn\Spring\springboot\springboot_workspaces\springboot2\springboot_devtools)
2020-11-21 13:29:37.832  INFO 17220 --- [           main] o.s.b.devtools.RemoteSpringApplication   : No active profile set, falling back to default profiles: default
2020-11-21 13:29:39.170  WARN 17220 --- [           main] o.s.b.d.r.c.RemoteClientConfiguration    : The connection to http://127.0.0.1:8080 is insecure. You should use a URL starting with 'https://'.
2020-11-21 13:29:39.373  INFO 17220 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2020-11-21 13:29:39.406  INFO 17220 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 3.789 seconds (JVM running for 5.912)

到这里,Spring Boot 远程程序和本地程序都已经启动成功。

接下来,我们去修改一个文件且编译它,看看 Spring Boot 会有什么反应。笔者这里只修改了一下 index.ftl 文件,Spring Boot 输出了如下日志:

2020-11-21 13:30:02.960  INFO 17220 --- [   File Watcher] o.s.b.d.r.c.ClassPathChangeUploader      : Uploaded 1 class resource
2020-11-21 13:30:10.395  INFO 17220 --- [pool-1-thread-1] o.s.b.d.r.c.DelayedLiveReloadTrigger     : Remote server has changed, triggering LiveReload

再去看看浏览器,你会发现 Spring Boot 远程应用的页面已经变化了。

简单的说来,Spring Boot 本地远程客户端会监听本地文件的变化,当本地文件变化了,会将变化的文件通过网络传递到远程应用中,重启/重新加载远程应用。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号