65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure 上的 Java 应用和数据现代化第一部分:介绍

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2022 年 2 月 25 日

CPOL

6分钟阅读

viewsIcon

3911

如何设置项目并准备数据库。

当应用程序运行在不符合需求的服务器上时,企业通常必须重新调整资源。许多公司都有一个单体的 Java 应用程序需要一个新的归宿,但他们需要知道如何应对这一挑战。本系列旨在提供帮助。

本系列以 Spring Boot PetClinic 示例应用程序作为 Java 单体应用,展示了如何将其迁移到 Microsoft 的 Azure 平台,以获得云的好处。以下六篇文章将展示如何将其重构为真正的云原生应用程序。

将单体应用程序迁移到一系列云原生服务是一个旅程,但你可以将其分解为一系列小任务来完成。

系列概述

第一步,将在 下一篇文章 中介绍,是将数据从本地数据库迁移到云数据服务。这种方法将问题类型限制在应用程序连接到数据时的访问问题。由于应用程序开发仍然在同一平台和流程上进行,因此可以快速调整应用程序。这种方法还可以先用测试数据填充数据库并验证访问控制,然后再将实际客户数据置于风险之中。

在将应用程序连接到新数据服务后,本系列的 第三部分 将应用程序迁移到云计算服务。应用程序安全性不属于本系列内容。虽然 Azure 提供了 处理安全性的服务,但本系列仅演示如何提供基本安全性以确保数据不被公开访问,并提供了一些进一步学习的参考。

本系列的 最后三部分 将介绍容器化应用程序,然后迁移到使用 Hyperscale (Citus) 部署选项的 Azure Database for PostgreSQL,以处理大规模应用程序。本系列最后将应用程序的一部分迁移到 Azure Functions,以演示迈向完全云原生的途径。

首先,本文将设置项目并准备数据库。

项目概述

Spring Boot PetClinic 应用程序是一个完整的单体应用程序,使用嵌入式 Web 服务器。它还支持 MySQL 和 Postgres 数据库。本教程使用本地 Postgres 数据库,而 Azure 的 Database for PostgreSQL 是其即插即用式替代品。

应用程序中唯一需要更改的是数据服务器的主机名。Azure 的 App Service 提供易于设置的可靠计算服务,可以在不进行任何更改的情况下运行此应用程序。

Azure 的计算和数据服务简化了硬件和网络的设置,让您可以专注于开发。Azure 平台将开发过程中的安全风险降至最低。默认情况下,Azure Database for PostgreSQL 服务器是安全的,因为它无法公开访问。尽管如此,仍有现成的选项可配置从开发计算机和其他 Azure 服务进行访问。

当您准备好部署生产服务时,设置特定的防火墙规则或 VLAN 访问非常简单。Azure App Service 提供配置好的负载均衡器和 SSL 证书,以限制合格用户的应用程序访问。

设置项目

以下是设置 Spring Boot 的 PetClinic 应用程序的先决条件:

  • Java 11
  • Git
  • IntelliJ (或您选择的 IDE)
  • Maven Helper
  • 在本地服务器上运行的 Postgres

PetClinic 支持 Java 8、11 和 17。本文使用 Java 11 和 Git 客户端来克隆存储库。它还使用 IntelliJ IDE 作为开发环境,但您也可以使用 Eclipse 或任何其他 IDE。该应用程序支持 Maven 和 Gradle,尽管本文使用 Maven 和 IntelliJ 中安装的 Maven Helper。

准备数据库

PetClinic 提供了一个 schema 和初始数据。Spring Boot 使用 Spring 的 Java Persistence API (JPA) 实现,在应用程序启动时创建数据库并(如果需要)填充数据。应用程序使用此功能来实现,但它需要一个数据库用户和一个属于该用户的空数据库,以便 PetClinic 可以连接到服务器。有很多方法可以做到这一点。本文使用 Postgres 交互式命令行客户端。

以下 psql 命令使用所需的密码设置 petclinic 用户。下面的主机、用户 ID 和数据库值因环境而异。

C:\Projects\PetClinic\postgresDb>psql -h localhost -U Admin -d postgres
Password for user Admin:
psql (14.1)
WARNING: Console code page (437) differs from Windows code page (1252)
       8-bit characters might not work correctly. See psql reference
       page "Notes for Windows users" for details.
Type "help" for help.

postgres=# create user petclinic password 'petclinic';
CREATE ROLE

下一步是创建空数据库并将所有权分配给 petclinic 用户。

postgres=# create database petclinic with owner petclinic;
CREATE DATABASE
postgres=# \q

克隆存储库

现在是时候使用 Git 命令行客户端设置开发环境并克隆存储库了。

git clone https://github.com/spring-projects/spring-petclinic.git spring-petclinic

在 IntelliJ 中设置项目

要在 IntelliJ 中设置项目,请单击 **Open** 并选择 **Projects** 目录。

当 IntelliJ 打开项目时,它会看到 Maven 和 Gradle 配置。选择 **Maven project**。

IntelliJ 打开项目并显示 readme.md 文件。为了确保完整的源文件和文件夹存在,请右键单击项目名称,然后选择 **Maven** 和 **Generate Sources and Update Folders**。

要运行应用程序,请创建一个运行配置。单击 **Run** > **Edit Configuration** 开始此过程。

项目没有任何配置,因此您必须创建一个新配置,但您还需要确保它是 Maven 配置。

需要更改两组设置。将目标添加到 **Run** 命令,并将 Postgres profile 添加到环境变量中,如下所示:

  • Run: spring-javaformat:apply spring-boot:run
  • JRE: Project SDK 11
  • Environment Variables: spring.profiles.active=postgres

单击 **OK** 保存更改,然后使用您刚刚创建的配置运行应用程序。

IntelliJ 会构建应用程序,创建并初始化数据库,然后重新启动应用程序。当过程成功时,您将看到类似以下屏幕截图的内容。最后一行将显示“Started....”。

您可以通过在浏览器中打开 https://:8080 来验证应用程序是否正在运行。

Postgres profile 的一个挑战是它在插入示例数据后不会更新主键序列。如果您尝试添加宠物或访问记录,应用程序将抛出异常。要解决此问题,您必须重新排序数据库。

重新排序数据库

创建一个名为 resetSeqeunce.pg 的文本文件,其中包含以下 SQL 语句:

SELECT setval('owners_id_seq', max(id)) FROM owners;
SELECT setval('pets_id_seq', max(id)) FROM pets;
SELECT setval('specialties_id_seq', max(id)) FROM specialties;
SELECT setval('types_id_seq', max(id)) FROM types;
SELECT setval('vets_id_seq', max(id)) FROM vets;
SELECT setval('visits_id_seq', max(id)) FROM visits;

使用以下 psql 命令执行这些语句。您应该会看到 setval 命令执行的结果。下面的用户 id 是因为您需要它来更新现有数据库。数据库密码是 petclininc

C:\Projects\PetClinic\postgresDb> psql -h localhost -U petclinic -d petclinic -f resetSequence.pg
Password for user petclinic:

setval
--------
   10
(1 row)
setval
--------
   13
(1 row)
setval
--------
    3
(1 row)
setval
--------
    6
(1 row)
setval
--------
    6
(1 row)
setval
--------
    4
(1 row)
C:\Projects\PetClinic\postgresDb>

后续步骤

就是这样!PetClinic 已启动并运行,准备就绪。您还拥有将数据和应用程序迁移到 Azure 平台所需的大部分工具。在本系列的第三篇文章中,您将添加 IntelliJ 的 Azure Toolkit。

对于本系列的第二篇文章,您将需要一个 Azure 帐户。如果您还没有,请创建免费的 Azure 帐户

如果您想预览接下来的两篇文章涵盖的内容,请查看这些培训模块:

继续阅读下一篇文章,了解有关迁移数据的更多信息。

如果您想与 Microsoft Java on Azure 团队讨论具体的 Java 应用迁移场景,请填写此问卷调查,然后将有代表与您联系。

© . All rights reserved.