领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多嗨,Spring 粉丝们!在这个简短的 8 部分系列中,我们将了解 Google Cloud Platform 的 Spring Cloud 集成,称为 Spring Cloud GCP。Spring Cloud GCP 代表了 Google 和 Pivotal 之间的共同努力,旨在为使用 Google Cloud Platform 的 Spring Cloud 开发人员提供一流的体验。Pivotal Cloud Foundry 用户将享受更轻松与 GCP 服务代理集成。我编写这些部分时参考了 Google Cloud 开发者布道师,也是我的朋友,Ray Tsang 的意见。您还可以在我们的 Google Next 2018 会议上观看 Spring Cloud GCP 的演练,Bootiful Google Cloud Platform。谢谢我的朋友!一如既往,如果您有任何反馈,我很乐意听到您的声音。
本系列共有八篇文章。它们都在这里
在本部分中,我们将了解如何将基于 Spring Boot 的应用程序连接到在 Google Cloud Platform 上运行的 SQL 数据存储,例如 PostgreSQL 或 MySQL。GCP 提供托管的 SQL 服务,包括 MySQL 和 PostgreSQL。让我们配置一个 MySQL 实例并从基于 Spring Boot 的应用程序中使用它。您需要首先在 Google Cloud 中启用 SQL API。
gcloud services enable sqladmin.googleapis.com
然后,您需要在特定区域中配置新的 Google Cloud SQL 实例。默认值为 MySQL。(这可能需要几分钟!)
gcloud sql instances create reservations --region=us-central1
然后,在该 Google Cloud SQL 实例中配置一个新的数据库。
gcloud sql databases create reservations --instance reservations
有几种方法可以建立与该 CloudSQL 实例的安全连接,例如配置 JDBC 驱动程序使用 SSL Socket Factory 和/或使用 SQL Proxy。但是,为了简化所有配置,您可以添加 GCP MySQL 启动器:org.springframework.cloud
:spring-cloud-gcp-starter-sql-mysql
。此启动器和一些配置可以将您的应用程序连接到平台。
您可能会问,什么配置?Spring 应用程序具有 bean 定义(在 Java 代码中)和属性定义(在许多不同的属性源中,包括.yaml
和 .properties
文件,以及我们稍后将看到的 GCP 的 RuntimeConfig 机制)。您可以使用配置文件选择性地激活特定的 bean 定义和属性定义。Spring 配置文件是标识不同 bean 和属性配置的任意标签,这些配置可以被选择性地激活。在此示例中,我们使用mysql
配置文件。
让我们看一下src/main/resources/application.properties
中mysql
配置文件的配置。
application.properties。
spring.cloud.gcp.sql.database-name=reservations
spring.cloud.gcp.sql.instance-connection-name=pgtm-jlong:us-central1:reservations
spring.datasource.initialization-mode=always
spring.datasource.hikari.maximum-pool-size=2
src/main/resources/schema.sql
(如果存在)来初始化模式。src/main/resources/schema.sql
包含用于创建预订表的 DDL。
在此示例中,我们让 Spring Boot 配置数据库。还有其他方法。我们可以使用gcloud sql connect $GCP_SQL_INSTANCE
,其中$GCP_SQL_INSTANCE
应替换为您的 GCP SQL 实例名称。在本例中,SQL 实例名称为reservations
。这将使您进入连接到远程数据库的 MySQL 会话,您可以在其中交互地发出相关的模式 DDL。
这是一个演示,所以让我们也安装一些示例数据。您可以创建一个文件src/main/resources/data.sql
,Spring 将在应用程序启动时执行该文件,或者您可以使用gcloud sql connect
。无论哪种方式,请运行以下语句。
insert into reservations(name) values('ray');
insert into reservations(name) values('josh');
现在您可以像使用任何其他 SQL 数据库一样从 Spring 应用程序与数据库进行通信。
package com.example.gcp.mysql;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.annotation.Profile;
import org.springframework.context.event.EventListener;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.util.Collection;
@SpringBootApplication
public class MySqlApplication {
private final Log log = LogFactory.getLog(getClass());
private final JdbcTemplate template;
private final RowMapper<Reservation> rowMapper =
(rs, rowNum) -> new Reservation(rs.getLong("id"), rs.getString("name"));
MySqlApplication(JdbcTemplate template) {
this.template = template;
}
@EventListener(ApplicationReadyEvent.class)
public void ready() {
Collection<Reservation> reservations = this.template
.query("select * from reservations", this.rowMapper);
reservations.forEach(reservation -> log.info("reservation: " + reservation.toString()));
}
public static void main(String args[]) {
SpringApplication.run(MySqlApplication.class, args);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Reservation {
private Long id;
private String reservationName;
}
运行应用程序并确认结果是否反映在输出中。
此时,您应该已经很熟悉了;您可以使用 Spring Data JPA 和 Spring Data REST、JOOQ、MyBatis 或任何其他基于 JDBC 的技术以及 Spring Boot 来使用此 GCP 托管的 MySQL 实例。
在这篇文章中,我们使用了 Google Cloud 托管的 MySQL。这并不是特别有趣;这不是您应该使用 GCP 的原因。任何人都可以运行 MySQL!在下期文章中,我们将了解如何使用 Spring Cloud GCP 使用 Google Cloud Spanner。请务必在下周一查看下一期文章。