24、云开发:Spring Boot应用部署与扩展指南

云开发:Spring Boot应用部署与扩展指南

1. Cloud Foundry CLI安装

在使用PAS之前,需要安装一个命令行工具,它对部署和执行其他任务非常有用。不同操作系统的安装方式如下:
- Windows系统 :可以从 https://github.com/cloudfoundry/cli#downloads 获取最新版本,也可以使用“Tools”选项卡并根据操作系统进行安装。
- Mac OS/Linux系统 :可以使用 brew 进行安装,具体命令如下:

$ brew update
$ brew tap cloudfoundry/tap
$ brew install cf-cli

安装完成后,可以通过以下命令测试:

$ cf --version

示例输出:

cf version 6.39.0+607d4f8be.2018-09-11
2. 使用CLI工具登录PWS/PAS

要登录PWS和你的账户,可以执行以下命令:

$ cf login -a api.run.pivotal.io

执行该命令后,会依次提示输入邮箱和密码,示例交互如下:

API endpoint: api.run.pivotal.io
Email> your-email@example.org
Password>
Authenticating...
OK
Targeted org your-org
Targeted space development
API endpoint:   https://api.run.pivotal.io (API version: 2.121.0)
User:           your-email@example.org
Org:            your-org
Space:          development

默认情况下,你会处于开发空间,此时可以对PWS(PAS实例)执行创建、部署、扩展等命令。

3. 将ToDo应用部署到PAS

部署的应用必须有唯一的子域名。首先,定位你的JAR文件( todo-rest-0.0.1-SNAPSHOT.jar ),如果使用Maven,它应该在 target 目录下;如果使用Gradle,它应该在 build/libs 目录下。
使用以下命令推送应用:

$ cf push <name-of-the-app> [options]

部署ToDo应用的示例命令如下:

$ cf push todo-app -p todo-rest-0.0.1-SNAPSHOT.jar -n todo-app-fg

cf 命令的常用选项如下:
- -p :告诉 cf 命令上传一个文件或特定目录的所有内容。
- -n :创建一个必须唯一的子域名。默认情况下,每个应用都有 <sub-domain>.cfapps.io 的URI,该URI必须唯一。可以省略 -n 选项,但 cf 会使用应用的名称,可能会与其他名称冲突。

部署完成后,可以在浏览器中使用给定的URI访问应用,例如: https://todo-app-fg.cfapps.io/toDos

还可以通过以下命令查看应用日志:

$ cf logs todo-app

该命令会实时显示日志,你可以刷新或向应用发送请求以查看日志,这是调试应用的有用方法。

4. 创建服务

可以通过以下命令向应用添加ToDo任务:

$ curl -XPOST -d '{"description":"Learn to play Guitar"}' -H "Content-Type: application/json" https://todo-app-fg.cfapps.io/toDos

响应示例:

{
  "description": "Learn to play Guitar",
  "created": "2018-09-18T01:58:34.211",
  "modified": "2018-09-18T01:58:34.211",
  "completed": false,
  "_links": {
    "self": {
      "href": "https://todo-app-fg.cfapps.io/toDos/8a70ee1f65ea47de0165ea668de30000"
    },
    "toDo": {
      "href": "https://todo-app-fg.cfapps.io/toDos/8a70ee1f65ea47de0165ea668de30000"
    }
  }
}

默认情况下,应用使用H2(内存数据库)驱动。PAS提供了创建服务的方法,以使用MySQL服务为例,操作步骤如下:
1. 查看PWS可用的服务:

$ cf marketplace
  1. 创建MySQL服务实例:
$ cf create-service cleardb spark mysql

这里选择的是免费的 spark 计划,如果选择其他计划,需要添加信用卡并按月收费。
3. 查看服务:

$ cf services

输出示例:

name    service   plan    bound apps   last operation
mysql   cleardb   spark             create succeeded
  1. 将应用与服务绑定:
$ cf bind-service todo-app mysql

绑定后,为确保环境变量更改生效,可执行以下命令:

$ cf restage todo-app
  1. 重启应用:
$ cf restart todo-app
  1. 查看应用的环境变量:
$ cf env todo-app

可以使用任何MySQL客户端连接到该服务,示例命令如下:

$ mysql -h us-cdbr-iron-east-01.cleardb.net -ub2c041b9ef8f25 -p30e7a38b ad_9a533ebf2e8e79a

连接成功后,可以执行SQL查询,例如:

mysql> show tables;
+------------------------------+
| Tables_in_ad_9a533ebf2e8e79a |
+------------------------------+
| to_do                        |
+------------------------------+
1 row in set (0.07 sec)

mysql> select * from to_do \G
*************************** 1. row ***************************
         id: 8a72072165ea86ef0165ea887cd10000
  completed:
    created: 2018-09-18 02:35:38
description: Learn to play Guitar
   modified: 2018-09-18 02:35:38
1 row in set (0.07 sec)

整个操作流程可以用以下mermaid流程图表示:

graph LR
    A[安装Cloud Foundry CLI] --> B[登录PWS/PAS]
    B --> C[部署ToDo应用]
    C --> D[创建服务]
    D --> E[绑定服务到应用]
    E --> F[重启应用]
    F --> G[查看环境变量和连接服务]
5. 清理资源

为了在需要时使用更多的信用额度,需要清理服务和应用,操作步骤如下:
1. 解除应用与服务的绑定:

$ cf unbind-service todo-app mysql
  1. 删除服务:
$ cf delete-service mysql

执行该命令时会提示确认是否删除服务,可以使用 -f 标志避免确认提示。
3. 删除应用:

$ cf delete -f todo-app
  1. 查看当前运行的应用:
$ cf apps

如果输出 No apps found ,则表示当前没有运行的应用。

6. 创建自定义spring-boot-starter

接下来介绍如何创建一个自定义的 spring-boot-starter ,该自定义启动器是一个客户端,可用于对ToDo任务执行创建、查找等操作,它需要连接到ToDo REST API服务的主机。

6.1 项目结构设置

由于目前没有自定义 spring-boot-starter 的模板,需要手动创建项目结构,具体如下:

todo-client-starter/
├── todo-client-spring-boot-autoconfigure
└── todo-client-spring-boot-starter

需要创建一个名为 todo-client-starter 的文件夹,并在其中创建两个子文件夹: todo-client-spring-boot-autoconfigure todo-client-spring-boot-starter 。Spring Boot团队建议自定义启动器遵循以下命名约定: <name-of-starter>-spring-boot-starter <name-of-starter>-spring-boot-autoconfigure

6.2 创建主pom.xml文件

todo-client-starter 文件夹中创建一个 pom.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.apress.todo</groupId>
    <artifactId>todo-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>todo-client</name>
    <modules>
        <module>todo-client-spring-boot-autoconfigure</module>
        <module>todo-client-spring-boot-starter</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

pom.xml 文件定义了两个模块, <packaging/> 标签设置为 pom ,因为最终需要将这些JAR文件安装到本地仓库以供后续使用。同时,通过 <dependencyManagement/> 标签引入Spring Boot的依赖,这样就不需要在后续声明依赖时指定版本。

6.3 创建todo-client-spring-boot-starter的pom.xml文件

todo-client-spring-boot-starter 文件夹中创建 pom.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.apress.todo</groupId>
    <artifactId>todo-client-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>todo-client-spring-boot-starter</name>
    <description>Todo Client Spring Boot Starter</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <parent>
        <groupId>com.apress.todo</groupId>
        <artifactId>todo-client</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>com.apress.todo</groupId>
            <artifactId>todo-client-spring-boot-autoconfigure</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

该文件通过 <parent/> 标签关联到主 pom.xml 文件,并声明了 todo-client-spring-boot-autoconfigure 模块。可以将其看作一个标记,用于声明执行主要工作的模块。

6.4 创建todo-client-spring-boot-autoconfigure的结构和pom.xml文件

todo-client-spring-boot-autoconfigure 文件夹的最终结构如下:

todo-client-starter/
├── pom.xml
├── todo-client-spring-boot-autoconfigure
│   ├── pom.xml
│   └── src
│       └── main
│           ├── java
│           └── resources
└── todo-client-spring-boot-starter
    └── pom.xml

todo-client-spring-boot-autoconfigure pom.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.apress.todo</groupId>
    <artifactId>todo-client-spring-boot-autoconfigure</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <packaging>jar</packaging>
    <name>todo-client-spring-boot-autoconfigure</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <parent>
        <groupId>com.apress.todo</groupId>
        <artifactId>todo-client</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.hateoas</groupId>
            <artifactId>spring-hateoas</artifactId>
        </dependency>
        <!-- JSON / Traverson -->
        <dependency>
            <groupId>org.springframework.plugin</groupId>
            <artifactId>spring-plugin-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

pom.xml 文件定义了项目的构建配置和依赖,包括Spring Boot的Web、安全等依赖,以及一些工具库和测试依赖。

7. 总结

通过以上步骤,我们学习了如何使用Cloud Foundry CLI将Spring Boot应用部署到PAS,包括应用的部署、服务的创建和绑定,以及资源的清理。同时,还介绍了如何创建自定义的 spring-boot-starter ,包括项目结构的设置和 pom.xml 文件的配置。这些知识可以帮助开发者更高效地将Spring Boot应用部署到云环境,并创建可复用的组件。

整个创建自定义 spring-boot-starter 的流程可以用以下mermaid流程图表示:

graph LR
    A[创建todo-client-starter文件夹] --> B[创建主pom.xml文件]
    B --> C[创建todo-client-spring-boot-starter文件夹及pom.xml文件]
    B --> D[创建todo-client-spring-boot-autoconfigure文件夹及结构和pom.xml文件]

希望这些内容能对你在云开发中部署和扩展Spring Boot应用有所帮助,你可以尝试使用这些方法部署其他示例项目,如 todo-mongo todo-redis todo-rabbitmq 等。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值