STS 中的 Spring Boot Dashboard - 第 3 部分:Spring Boot Devtools 重新加载

工程 | Martin Lippert | 2015年10月22日 | ...

Spring 社区的各位,欢迎回来!

这是我们关于 Spring Tool Suite 中新 Spring Boot Dashboard 系列的最后一篇。在这最后一篇中,我们将深入探讨结合使用 Spring Boot Devtools 和 Boot Dashboard。同样,此功能是 Spring Boot 1.3 的新功能,因此您需要使用该版本才能使用以下功能。

快速部署代码更改

对于本地应用程序,使用 Spring Boot Devtools 非常简单直接。一旦您将 Spring Boot Devtools 添加到项目作为依赖项(在上下文菜单的 Spring 类别中有一个简单的菜单选项),并启动您的应用程序,它就会监听配置和类文件的本地更改,并自动为您重新启动应用程序。您甚至不需要自己重新启动应用程序,Spring Boot Devtools 会自动为您完成。由于 STS/Eclipse 在您保存文件时会生成和更新类文件,因此在 STS 中工作时,所有这些都会自动为您完成。

如果您将 Spring Boot 应用程序运行在远程运行时(如 Cloud Foundry)上,那么这个故事会更有趣。原则上,您也可以在这样的远程环境中为此使用 Spring Boot Devtools,但这需要一些额外的工作。好消息是,Spring Boot Dashboard 会在这方面帮助您。

一旦您在 Cloud Foundry 上部署或重新启动(从而更新)一个具有 Spring Boot Devtools 依赖的 Spring Boot 应用程序(使用 Boot Dashboard),Boot Dashboard 就会自动为 CF 上的 Boot 应用程序配置 Devtools 的远程使用。这主要包括设置一个远程密钥,以允许远程 Devtools 访问它。

一旦启用 Devtools 的 Boot 应用程序在 Cloud Foundry 上运行,您就可以轻松地为此启动 Boot Devtools 远程客户端应用程序。这个客户端应用程序在您的本地计算机上运行,并连接到 Cloud Foundry 上的远程应用程序。它会监视文件更改,将它们上传到 Cloud Foundry 上的应用程序,并触发 Cloud Foundry 上的应用程序重新启动。

由于远程客户端应用程序会监视您本地计算机上项目中的文件更改,因此您可以像往常一样在 IDE 中继续工作。更改后的文件将由远程客户端应用程序自动更新到 Cloud Foundry 上的应用程序版本。Cloud Foundry 上的对应端会在更改后的文件保存到 Cloud Foundry 上的应用程序后重新启动 Boot 应用程序。这适用于新编译的源代码以及更改的资源文件。

这使您即使在部署到远程云运行时,也能在处理项目时实现快速周转周期。

云端调试

除了自动重新启动功能外,Spring Boot Devtools 还支持在云运行时上对远程应用程序进行全面调试。STS 中的 Spring Boot Dashboard 也支持此功能。如果您的应用程序的类路径中包含 Spring Boot Devtools,您可以为应用程序的 Cloud Foundry 实例按下(重新)调试按钮。这将使应用程序在 Cloud Foundry 上以调试模式重新启动,在您的计算机上自动启动相应的远程客户端应用程序,并将其连接到 Eclipse 调试器。

您可以像调试本地应用程序一样调试运行在云运行时上的应用程序,包括设置断点、检查变量,甚至热交换代码。但是,由于 Boot Devtools 目前的技术限制,对于运行在调试模式下的应用程序,自动重新启动功能不可用。

如果您尝试在 Cloud Foundry 上进行远程应用程序调试,您会注意到调试速度明显变慢。这是由于 JVM 的远程调试协议通过 HTTP 连接进行隧道传输造成的,而远程调试协议并非为此设计。我们正在努力通过使用不同的传输机制来改进这一点。但 Cloud Foundry 上的应用程序远程调试应该是您很少做的事情。为了更频繁的调试,您可以考虑在本地运行和调试应用程序,并通过我们在本博客系列上一部分中描述的 ngrok 隧道功能将其连接到您的其他应用程序服务。

结论

本系列博客到此结束,介绍了 Spring Tool Suite 自 3.7.1 版本以来的一项新功能——Spring Boot Dashboard。请告诉我们您使用该 Dashboard 的体验。

本周 Spring 动态 (SpringOne2GX 重播 / Pieter Humphrey 版!) - 2015 年 10 月 21 日

工程 | Josh Long | 2015年10月21日 | ...

欢迎收看又一期的《本周 Spring 动态》!本周是《本周 Spring 动态》的第一个(也是许多期中的之一),非常棒的 [https://twitter.com/pieterhumphrey](Pieter Humphrey) 发布了大量 SpringOne2GX 2015 的视频供我们尽情观看!本周丰富的集锦大部分归功于 Pieter 对 SpringOne2GX 2015 视频的细致转码、上传和发布——谢谢 Pieter!话不多说,让我们来看看本周的一些精选内容,包括大量来自 SpringOne2GX 的内容,例如...

  • ..Juergen Holler 和 Stephane Nicoll 的演讲,介绍 Spring framework 4.2 的更新
  • ..SpringOne2GX 第一天的头脑风暴 ,由 James Watters、Dr. David Syer、Scott Frederick、Juergen Hoeller 和本人主演
  • ..SpringOne2GX 第二天的头脑风暴 ,由 Guillaume LaForge、Graeme Rocher、Dr. David Syer、Mark Fisher、Scott Frederick 和本人主演
  • ..Spring Boot 和 Spring Cloud 联合创始人 Dr. Dave Syer 和我,在 Spring 创建者兼英雄 Dr. Rod Johnson非常慷慨的客串下,发表的介绍 Spring Cloud 的演讲 (我从来没有如此荣幸能够参与这次演讲,我真心...

SpringOne2GX 2015 回放:使用 Grails 引导物联网

工程 | Pieter Humphrey | 2015 年 10 月 19 日 | ...

录制于 SpringOne2GX 2015。

演讲者:Colin Harrington, OCI Web

幻灯片:http://www.slideshare.net/SpringCentral/booting-iot-with-grails

在云计算、虚拟化、容器化、微服务和纳米服务等世界里,我们谈论着纵向扩展、横向扩展和解耦我们的系统,但通常忽略了向嵌入式平台进行缩减。在我们摆脱沉重的单体 Web 容器的同时,我们也看到了像 RaspberryPi 这样强大的低成本嵌入式 Linux 设备蓬勃发展。

STS 中的 Spring Boot Dashboard - 第 2 部分:与 Cloud Foundry 协同工作

工程 | Martin Lippert | 2015年10月15日 | ...

Spring 社区的各位,欢迎回来!

在我们关于 Spring Tool Suite 中新 Spring Boot Dashboard 的博客系列第二部分中,我们将超越您工作区中的本地应用程序,并关注部署到云运行时的远程应用程序。如果您错过了第一部分,请务必先查看一下,以便首先熟悉 STS 中的 Boot Dashboard。

云运行时支持

我们目前在 Boot Dashboard 中支持的第一个远程目标是 Cloud Foundry。Boot Dashboard 的设计和实现并不限制其只能是唯一的受支持远程目标,它只是我们首先投入工作的第一个目标。

我们的目标是提供与本地应用程序相似的体验,让您能够轻松地与 Cloud Foundry 上的 Spring Boot 应用程序进行交互、启动、停止、更新以及查找日志输出。因此,您可以使用工具栏中的大加号图标向 Boot Dashboard 添加 Cloud Foundry 部分。

一旦您输入了凭据并选择了组织/空间,Boot Dashboard 中就会出现一个新的部分,列出已部署到 Cloud Foundry 该空间中的应用程序。您可以查看应用程序的名称以及已配置并正在运行的实例数。

基本操作对于 CF 上的一个或多个应用程序的操作方式与本地应用程序相同或非常相似。您可以跳转到控制台输出,它将出现在 STS/Eclipse 的控制台视图中,您可以启动和停止应用程序,您可以双击它们进入运行中应用程序的浏览器窗口,您可以为应用程序配置默认路径,并且您可以向应用程序添加/删除标签。如果您在 Boot Dashboard 中跨目标部分选择了多个条目,您甚至可以跨目标执行某些操作(例如启动和停止)。

除了适用于本地应用程序和 Cloud Foundry 上的应用程序的通用操作外,还有一些专门针对 Cloud Foundry 上的应用程序的附加操作。例如,Boot Dashboard 允许您从 Cloud Foundry 中完全删除一个应用程序,或者轻松跳转到 Web 控制台。

部署到 Cloud Foundry

到目前为止,我们讨论的是 Cloud Foundry 上的现有应用程序。但是,如何将您的应用程序部署到 Cloud Foundry 呢?有多种方法,可以使用 CLI 或 Cloud Foundry 的 Eclipse 插件。Boot Dashboard 为您提供了另一种选择:您可以将您的 Spring Boot 应用程序直接拖放(drag&drop)到 Dashboard 中的 Cloud Foundry 目标,它将把 Spring Boot 应用程序部署到 CF。这正如听起来一样简单。

如果您的应用程序包含 manifest.yml 文件,它将被用于为 Cloud Foundry 配置应用程序。这通常包含应用程序名称、域、内存设置、实例数量,以及可能更多的信息。

如果您的项目中没有 manifest.yml 文件,部署操作将在对话框中提示您提供部署应用程序所需的基本信息。

但是请注意:如果项目包含 manifest.yml 文件,它将被用于部署和配置应用程序。您通过 Web 控制台对 CF 上的配置所做的任何更改,在您下次使用 Boot Dashboard 重新启动/重新部署/更新您的应用程序时将会丢失。要么在 manifest.yml 文件中配置所有内容,要么完全不使用它——至少目前是这样。我们将努力改进这一点,以允许更灵活地处理 manifest.yml 文件和应用程序配置的外部更改,但这将在 STS 的未来版本中完成。

一旦应用程序部署完成,Boot Dashboard 将保持您工作区中的项目与 Cloud Foundry 上已部署的应用程序之间的关联(并在 Boot Dashboard 中显示此关联)。

保持您的工作区项目与 Cloud Foundry 上的应用程序之间的这种关联,可以使对该应用程序的更改变得容易得多。如果您在工作区中更改了代码并按下 CF 上应用程序的(重新)启动按钮,Boot Dashboard 将自动将应用程序(更改)重新推送到 Cloud Foundry。

一旦您在 Cloud Foundry 上部署了应用程序,您通常不需要同时处理所有内容。通常,您会专注于应用程序的某些部分,有时您甚至希望同时使用两者:一些服务运行在 Cloud Foundry 上,一些服务运行在您的 IDE 的本地机器上。但是它们是如何交互的呢?

为混合部署隧道化本地服务

作为一项早期实验,我们在 Boot Dashboard 中构建了一项特定功能,让您可以利用 CF 上的所有服务和应用程序,并让它们调用本地计算机上运行的单个服务。这样,您可以专注于您景观中的各个项目,并继续使用 Cloud Foundry 来处理您世界的其余部分。您可以快速迭代并在本地处理代码——并在使用 Cloud Foundry 上的其他部分时对其进行测试。这不是很棒吗?

这是如何工作的:您已经部署了服务发现机制来管理您的微服务。目前,我们支持 Eureka 服务发现服务来实现此功能。您可以通过一个名为“(re)start and expose app via ngrok”的特殊操作来启动您的本地 Spring Boot 应用程序。执行此操作将(重新)启动您本地机器上的本地应用程序。同时,该操作将使用 ngrok 服务创建一个对该应用程序公开可见的隧道。结果是,您将获得一个公开可见的 URL,该 URL 将所有流量路由到您的本地机器和运行在本地机器上的本地 Spring Boot 应用程序。应用程序会自动配置为使用此公开可见的隧道 URL 向远程 Eureka 注册。

此服务的客户端现在将从 Eureka 获取此隧道 URL,而不是(或除了)您可能已经在 Cloud Foundry 上运行的服务默认实例——并将调用您本地运行的服务而不是 CF 上的服务。您可以快速迭代您的本地服务,甚至调试它。

这种混合部署场景显然不适用于生产环境或团队环境,因为在这些环境中,多个人同时使用 CF 上的应用程序。但它对于测试和开发环境来说非常有用。

对 Cloud Foundry 的支持只是一个起点。Spring Boot Dashboard 绝不局限于或专注于 Cloud Foundry。其他远程云运行时可以也将在未来添加。我们即将开始使用的下一个运行时之一是 Lattice,但其他运行时也非常受欢迎。如果您有兴趣合作,请告知我们。Spring Boot Dashboard 是在 EPL 下开源的,我们非常乐意与您合作开发其他功能并为其添加对更多云运行时的支持。

展望

本系列第三部分将向您介绍 Spring Boot Devtools 的内置支持,以及如何从 Boot Dashboard 中使用它们来快速修改您的应用程序(即使是在 CF 上),以及如何在 CF 上进行远程调试。

React.js 与 Spring Data REST:第 4 部分 - 事件

工程 | Greg L. Turnquist | 2015 年 10 月 13 日 | ...
要查看此代码的更新,请访问我们的 React.js 与 Spring Data REST 教程

上一节中,您引入了条件更新,以避免在与其他用户编辑相同数据时发生冲突。您还学习了如何通过乐观锁定在后端对数据进行版本控制。如果您发现有人编辑了相同的记录,您就会收到提示,以便您可以刷新页面并获取更新。

这很好。但您知道什么更好吗?当其他人更新资源时,UI 会动态响应。

在本节中,您将学习如何使用 Spring Data REST 内置的事件系统来检测后端的变化,并通过 Spring 的 WebSocket 支持将更新发布给所有用户。然后,您就可以在数据更新时动态调整客户端。

您可以随时从该存储库获取代码并进行跟进。本节基于上一节的应用程序,并添加了额外的内容。

为项目添加 Spring WebSocket 支持

在开始之前,您需要在项目的 pom.xml 文件中添加一个依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

这将引入 Spring Boot 的 WebSocket 启动器。

使用 Spring 配置 WebSockets

Spring 提供了强大的 WebSocket 支持。需要认识到的是,WebSocket 是一种非常底层的协议。它除了提供在客户端和服务器之间传输数据的方法外,几乎不做其他事情。建议使用子协议(本节使用 STOMP)来实际编码数据和路由。

以下代码用于在服务器端配置 WebSocket 支持

@Component
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
static final String MESSAGE_PREFIX = "/topic";

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
	registry.addEndpoint("/payroll").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
	registry.enableSimpleBroker(MESSAGE_PREFIX);
	registry.setApplicationDestinationPrefixes("/app");
}

}

  • @EnableWebSocketMessageBroker 启用 WebSocket 支持。
  • AbstractWebSocketMessageBrokerConfigurer 提供了一个方便的基类来配置基本功能。
  • MESSAGE_PREFIX 是您将添加到每个消息路由前面的前缀。
  • registerStompEndpoints() 用于配置后端上的端点,以便客户端和服务器进行链接(/payroll)。
  • configureMessageBroker() 用于配置用于在中继服务器和客户端之间的消息的代理。

有了这个配置,现在就可以利用 Spring Data REST 事件并通过 WebSocket 发布它们了。

订阅 Spring Data REST 事件

Spring Data REST 会根据存储库上发生的动作生成多个应用程序事件。以下代码显示了如何订阅其中一些事件

@Component
@RepositoryEventHandler(Employee.class)
public class EventHandler {
private final SimpMessagingTemplate websocket;

private final EntityLinks entityLinks;

@Autowired
public EventHandler(SimpMessagingTemplate websocket, 
			EntityLinks entityLinks) {
	this.websocket = websocket;
	this…

本周 Spring 动态 - 2015 年 10 月 13 日

工程 | Josh Long | 2015 年 10 月 13 日 | ...

欢迎收看又一期的《本周 Spring 动态》!本周我将在波兰克拉科夫参加 JDD,然后前往俄罗斯圣彼得堡参加 Joker 会议

我们有很多内容要介绍,所以让我们开始吧!

STS 中的 Spring Boot Dashboard - 第 1 部分:本地 Boot 应用

工程 | Martin Lippert | 2015 年 10 月 8 日 | ...

Spring 社区的各位,欢迎!

这是介绍 STS 中新 Spring Boot Dashboard 的三篇博客文章中的第一篇。您将了解如何在 IDE 中使用 Spring Boot Dashboard,了解它提供的各种功能,以及它在开发基于 Spring Boot 的应用程序时如何为您提供帮助。由于 Spring Boot Dashboard 已在最近发布的 STS 3.7.1 中引入,您需要该版本才能关注此博客系列。如果您尚未安装,请前往https://springframework.org.cn/tools/ 并获取您的副本。

介绍

Spring Boot 现在已经是一种广泛采用的技术,可以简化您在企业中实现 Spring 应用程序的流程。它特别适用于创建基于微服务的应用程序,彻底改变了我们对小型、易于配置的 Spring 应用程序的看法。结合 Spring Cloud,它为真正云原生的应用程序打开了大门,这些应用程序可能由许多微服务组成。

这种架构思维的巨大转变也需要在我们的 IDE 中得到反映。我们现有的许多传统 Java IDE 最初并非仅在云原生时代之前,而是在云时代之前,并在一定程度上是在分布式编程时代之前发明的。Spring Tool Suite 及其基础 Eclipse IDE 也是如此。是时候将这些 IDE 推向云原生时代了。这就是 Spring Boot Dashboard 的起点。它的重点是帮助您处理可能数量众多的基于 Spring Boot 的微服务应用程序,并使您在 IDE 中处理这些项目时作为开发人员的生活更加轻松。

Spring Boot Dashboard

从小处着手并逐步推进,Spring Boot Dashboard 作为 STS/Eclipse 中的一个附加视图。您可以按主工具栏中的 Spring Boot 按钮来打开它。它会打开一个简单的视图,该视图与您的工作区项目同步,显示您工作区中是 Spring Boot 项目的项目。

Boot Dashboard 的主要目的是让您快速访问您每天、每小时,甚至更频繁地进行的操作。您可以通过在 Boot Dashboard 中选择您的 Boot 应用,然后按工具栏中的“运行”或“调试”操作来快速启动它们(以运行或调试模式)。没有比这更快启动您的 Boot 应用的方式了。而且,由于您可能会更改代码并希望重新启动应用程序,因此如果应用程序已在运行,该操作将允许您重新启动 Boot 应用。更改您的代码,按 Boot Dashboard 中的“运行”按钮,您的 Boot 应用就会被停止并为您重新启动。同样,这是一个简单的单键操作。

这些操作(以及更多操作)在 Boot Dashboard 中的一个优点是它们可以同时作用于单个或多个项目。如果您想同时启动或停止一组 Boot 应用,例如启动一组协作服务,只需在 Dashboard 中全选它们,然后按“运行”即可。就是这样。

一旦您在项目中使用 Spring Boot 1.3,您就会注意到 Boot Dashboard 中会出现额外的亮点。一旦您的 Boot 应用开始启动,Boot Dashboard 就会可视化应用程序正在启动——并且它会区分其启动阶段(虚拟机正在运行,但应用程序仍在初始化)和它真正运行并准备使用。进度图标表示应用程序仍在启动,一旦应用程序完全初始化并运行,就会显示绿色的“向上”图标。您无需观察日志输出来等待“服务器已启动”消息或其他类似消息的出现。Boot Dashboard 的图标会告知您。

一旦应用程序运行起来,它所监听的端口就会显示在 Boot Dashboard 中——为了方便您。您不再需要扫描日志输出来查找应用程序正在使用的端口。Dashboard 会自动显示该信息。而且,如果您想跳转到正在运行的 Boot 应用的控制台输出,也有一个快速操作。

通常,您不再需要知道正在运行的应用程序的端口——因为您不必自己打开应用程序的浏览器选项卡。双击 Boot Dashboard 中的项目,它将为您打开一个新的浏览器选项卡——直接导航到应用程序的默认 URL。

默认情况下,这会打开一个 Eclipse/STS 内部浏览器视图。如果您更喜欢使用外部浏览器,可以在首选项中进行设置。

如果此默认 URL 不是您希望默认访问的 URL,您可以对其进行自定义。打开属性视图,在 Boot Dashboard 中选择项目,然后输入您偏好的默认 URL 扩展。双击将打开应用程序的默认 URL + 您自定义的扩展。

如果您不确定您的应用程序定义了哪些 URL 扩展,您可以选择属性视图中的“请求映射”选项卡。所有正在运行的应用程序的请求映射都列在那里——您自己定义的映射在列表顶部,来自库的映射在列表底部。双击 URL 扩展会在浏览器中打开该扩展,双击代码指针会在编辑器中打开项目对应的文件并跳转到定义请求映射的行。

您工作区中的微服务项目越多,您同时处理所有这些项目的可能性就越小。您想专注于一个子集。例如,在 Eclipse/STS 中,您可能已经创建了一个工作集。Boot Dashboard 允许您为项目添加任意数量的标签(同样,在属性视图中)。然后可以使用这些标签(在 Boot Dashboard 顶部的过滤器框中)来减少显示在 Boot Dashboard 中的项目数量。

展望

本系列的第二部分将介绍 Boot Dashboard 的 Cloud Foundry 集成,如何在 Boot Dashboard 中将微服务部署到 CF,以及如何在与部署在 CF 上的应用程序结合使用本地 Boot 应用程序。

本周 Spring 动态 - 2015 年 10 月 6 日

工程 | Josh Long | 2015 年 10 月 7 日 | ...

欢迎收看又一期的《本周 Spring 动态》!和往常一样,我们有很多内容要介绍,所以让我们开始吧!

Spring Initializr 的演进

工程 | Brian Clozel | 2015年10月06日 | ...

我们很高兴今天在https://start.spring.io 发布新版本的 Spring Initializr!

最初是一个小型的内部 Web 应用程序,用于生成 Spring Boot 项目,它已经发展到比我们预期的要大。您现在可以在 Web、您最喜欢的 IDE(Eclipse STS 和 IntelliJ IDEA)甚至使用您的命令行工具(尝试 curl https://start.spring.io)来使用 Spring Initializr。

与此同时,Spring 的产品组合不断增长,我们收到了来自 Spring 社区的大量有益反馈。因为实际数据无可替代,我们在夏季之前改进了该服务,将其指标导出到一个集中的 Redis 实例。这使我们能够在很长一段时间内保持可靠的活动统计数据(并且无论我们在Pivotal Web Services 上部署多少实例……)。

本周 Spring 动态 - 2015 年 9 月 29 日

工程 | Josh Long | 2015 年 9 月 30 日 | ...

欢迎收看又一期的《本周 Spring 动态》!对于那些在美国的读者,请允许我第一个祝您国家咖啡日快乐!和往常一样,我们有很多内容要介绍,所以让我们开始吧!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有