云开发: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
- 创建MySQL服务实例:
$ cf create-service cleardb spark mysql
这里选择的是免费的 spark 计划,如果选择其他计划,需要添加信用卡并按月收费。
3. 查看服务:
$ cf services
输出示例:
name service plan bound apps last operation
mysql cleardb spark create succeeded
- 将应用与服务绑定:
$ cf bind-service todo-app mysql
绑定后,为确保环境变量更改生效,可执行以下命令:
$ cf restage todo-app
- 重启应用:
$ cf restart todo-app
- 查看应用的环境变量:
$ 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
- 删除服务:
$ cf delete-service mysql
执行该命令时会提示确认是否删除服务,可以使用 -f 标志避免确认提示。
3. 删除应用:
$ cf delete -f todo-app
- 查看当前运行的应用:
$ 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 等。
超级会员免费看
875

被折叠的 条评论
为什么被折叠?



