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

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

欢迎来到 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 就会将其可视化——并区分其启动阶段(VM 正在运行,但应用仍在初始化)和真正运行并准备就绪的状态。进度图标表示应用仍在启动,当应用完全初始化并运行时,会出现绿色的“up”图标。您无需观察日志输出直到出现类似“服务器已启动”的消息或类似内容。Boot Dashboard 的图标会告诉您。

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

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

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

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

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

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

展望

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

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

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

欢迎来到新一期的本周 Spring 动态!像往常一样,本周我们有很多内容要涵盖,所以让我们开始吧!

Spring Initializr 的演进

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

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

Spring Initializr 最初是一个小型内部 web 应用程序,用于生成 Spring Boot 项目,后来发展成为超出我们预期的更大规模的项目。您现在可以在 web 上、您喜欢的 IDE(Eclipse STS 和 IntelliJ IDEA)中使用 Spring Initializr,甚至可以使用命令行工具(尝试 curl https://start.spring.io)。

与此同时,Spring 产品组合正在增长,我们收到了来自 Spring 社区的许多有益反馈。因为没有什么比实际数据更有说服力,我们在夏天之前改进了服务,将其指标导出到集中的 redis 实例。这使我们能够长期保留一组可靠的活动统计数据(并且无论我们在 Pivotal Web Services 上部署多少个实例…)

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

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

欢迎来到新一期的本周 Spring 动态!对于正在美国阅读的您,让我首先祝您 全国咖啡日快乐!像往常一样,我们有很多内容要涵盖,所以让我们开始吧!

React.js 和 Spring Data REST:第三部分 - 条件操作

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

上一节中,您了解了如何开启 Spring Data REST 的超媒体控件,通过分页进行 UI 导航,并根据页面大小的变化动态调整大小。您添加了创建和删除员工以及页面调整的功能。但是,任何解决方案都不完善,除非考虑到其他用户对您当前正在编辑的同一数据段所做的更新。

您可以随意从本仓库中获取代码并跟着操作。本节内容基于上一节的应用,并添加了额外的功能。

PUT 还是不 PUT,这是一个问题

当您获取资源时,存在一个风险,即如果其他人更新了它,它可能会过时。为了解决这个问题,Spring Data REST 集成了两项技术:资源版本控制和 ETags。

通过在后端对资源进行版本控制并在前端使用 ETags,可以有条件地 PUT 更改。换句话说,您可以检测资源是否已更改,并防止 PUT(或 PATCH)覆盖其他人的更新。让我们来看看。

REST 资源版本控制

为了支持资源的版本控制,为需要此类保护的域对象定义一个版本属性。

src/main/java/com/greglturnquist/payroll/Employee.java
@Data
@Entity
public class Employee {
private @Id @GeneratedValue Long id;
private String firstName;
private String lastName;
private String description;

private @Version @JsonIgnore Long version;

private Employee() {}

public Employee(String firstName, String lastName, String description) {
	this.firstName = firstName;
	this.lastName = lastName;
	this.description = description;
}

}

  • version 字段使用 javax.persistence.Version 注解。它会导致每次插入和更新行时自动存储和更新一个值。

当获取单个资源(而不是集合资源)时,Spring Data REST 会自动添加一个ETag 响应头,其值为该字段的值。

获取单个资源及其头

上一节中,您使用了集合资源来收集数据并填充 UI 的 HTML 表格。对于 Spring Data REST,_embedded 数据集被视为数据的预览。虽然对快速浏览数据有用,但要获取 ETags 等头,您需要单独获取每个资源。

在此版本中,loadFromServer 已更新,用于获取集合,然后使用 URI 检索每个单独的资源。

src/main/resources/static/app.jsx - 获取每个资源
loadFromServer: function (pageSize) {
    follow(client, root, [
        {rel: 'employees', params: {size: pageSize}}]
    ).then(employeeCollection => {
        return client({
            method: 'GET',
            path: employeeCollection.entity._links.profile.href,
            headers: {'Accept': 'application/schema+json'}
        }).then(schema => {
            this.schema = schema.entity;
            this.links = employeeCollection.entity._links;
            return employeeCollection;
        });
    }).then(employeeCollection => {
        return employeeCollection.entity._embedded.employees.map(employee =>
                client({
                    method: 'GET',
                    path: employee._links.self.href
                })
        );
    }).then(employeePromises => {
        return when.all(employeePromises);
    }).done(employees => {
        this.setState({
            employees: employees,
            attributes: Object.keys(this.schema.properties),
            pageSize: pageSize,
            links: this.links
        });
    });
},
  1. follow() 函数会访问 employees 集合资源。
  2. then(employeeCollection ⇒ …​) 子句创建了一个调用来获取 JSON Schema 数据。这包含一个子 then 子句,用于将元数据和导航链接存储在 <App/> 组件中。
    • 请注意,这个嵌入式 Promise 返回 employeeCollection。这样,集合可以传递到下一个调用,同时允许您在此过程中获取元数据。
  3. 第二个 then(employeeCollection ⇒ …​) 子句将员工集合转换为一个 GET Promises 数组,以获取每个单独的资源。这就是您获取每个员工的 ETag 头所需要的。
  4. then(employeePromises ⇒ …​) 子句接收 GET Promises 数组,并使用 when.all() 将它们合并为一个单独的 Promise,当所有 GET Promises 都被解决时,该 Promise 被解决。
  5. loadFromServer 使用 done(employees ⇒ …​) 结束,其中使用这种数据的组合来更新 UI 状态。

这个链也在其他地方实现。例如,用于跳转到不同页面的 onNavigate() 已更新,以获取单个资源。由于它与上面显示的大部分相同,因此在本节中省略了。

更新现有资源

在本节中,您将添加一个 UpdateDialog React 组件来编辑现有的员工记录。

src/main/resources/static/app.jsx - UpdateDialog 组件
var UpdateDialog = React.createClass({
handleSubmit: function (e) {
    e.preventDefault();
    var updatedEmployee = {};
    this.props.attributes.forEach(attribute =&gt; {
        updatedEmployee[attribute] = React.findDOMNode(this.refs[attribute]).value.trim…

查阅新的“使用 Vaadin 创建 CRUD UI”指南

工程 | Greg L. Turnquist | 2015 年 9 月 28 日 | ...

各位 Spring 社区成员,大家好,

今天我们发布了一个新的指南:使用 Vaadin 创建 CRUD UI

本指南由 Vaadin 团队编写,展示了如何精美地构建一个利用 Spring Data 的 UI,而且无需编写一行 JavaScript 或 HTML 代码。

Vaadin 真的很酷

  • 自带 Spring Boot Starter
  • 与构造函数注入配合得很好
  • 使其插入 Spring Data 等持久化解决方案变得异常简单
  • 配备了插件库,可以成长为真正的应用程序

快来查阅这篇新发布的指南,玩得开心!

作为 SpringOne 2GX 的后续,我们已经确定了需要编写更多指南。云原生的故事正在席卷开发者社区,人们正在寻求更多的解决方案。我们的工作不应该是搭建和堆叠服务器或构建基础设施。相反,我们应该专注于平滑且简单的解决方案。编写云原生代码…

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

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

欢迎来到新一期的本周 Spring 动态!本周,刚刚参加完精彩的 SpringOne2GX 2015,说实话,我有点累!:D 但是,Spring 依然存在,本周我在阿姆斯特丹与我们的朋友 Martin Deinum 一起,帮助一大群开发者使用 Spring Boot、Spring Cloud 和 Cloud Foundry 踏上云原生之旅。

Spring Integration Java DSL 1.1 GA 版本现已发布

工程 | Artem Bilan | 2015 年 9 月 22 日 | ...

亲爱的 Spring 社区成员们!

我代表 Spring Integration 团队很高兴宣布,Spring Integration Java DSL 的 1.1 GA 版本现已可从发布仓库Maven Central 获取

对于 Gradle 使用此依赖

'org.springframework.integration:spring-integration-java-dsl:1.1.0.RELEASE'

对于 Maven 使用此

<dependency>
     <groupId>org.springframework.integration</groupId>
     <artifactId>spring-integration-java-dsl</artifactId>
     <version>1.1.0.RELEASE</version>
</dependency>

首先,非常感谢上周参加我在 SpringOne 2GX 2015 上演讲的所有人…

使用 Vaadin Spring 1.0 构建单页 Web 应用

工程 | Stéphane Nicoll | 2015 年 9 月 17 日 | ...

这篇博文是社区成员 Matti Tahvonen (@MattiTahvonen) 的客座博文,他在Vaadin Ltd 担任开发者布道师,该公司最初开发了 Vaadin Framework,并为其提供商业服务和扩展。

Vaadin 的 Spring 集成库自五月以来一直处于 Beta 阶段,并已被多个生产应用程序使用。今天我们很自豪地宣布,Beta 标记已移除,稳定的 1.0.0 版本已发布。

Vaadin 是一个基于组件的 web UI 框架,您的应用程序状态和逻辑驻留在您的 Java 内存中…

本周 Spring 动态 - 2015 年 9 月 15 日 - SpringOne2GX 2015 特别版!

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

欢迎来到新一期的本周 Spring 动态!本周,我们在美丽的华盛顿特区参加精彩的 SpringOne2GX 2015

这是一场精彩的活动,充满了令人惊叹的、关键性的时刻,吸引了超过一千名与会者——包括来自全球一些大型网站(如 Rakuten、阿里巴巴、Netflix 等)的工程师——齐聚华盛顿特区,学习和喜爱 Pivotal 在 Spring 及其周边领域所做的工作。

以下是我最喜欢的一些瞬间

get cloud native

  • 今年,Pivotal 将云原生推得更远更快,SpringOne2GX 是对这一努力的盛大庆祝:拥抱云原生。

订阅 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

先行一步

VMware 提供培训和认证,助力您的快速成长。

了解更多

获取支持

Tanzu Spring 在一项简单的订阅中提供了 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将到来的活动

查看 Spring 社区所有即将到来的活动。

查看全部