SpringBoot + SCF 最佳实践:实现待办应用

2021-11-23 12:10:21 浏览数 (1)

SpringBoot 是由 Pivotal 团队提供的框架,用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Serverless 对于微服务的价值在于:

1. 每个微服务 API 被调用的频率不一样,可以利用 Serverless 精准管理成本和弹性。

2. 不用担心一个 API 调用量大而需要扩容整个服务,Serverless 可以自动扩缩容。

3. 不需要去运维每个服务背后部署多少个容器,多少个服务器,不用做负载均衡。

4. 屏蔽了 K8s 等容器编排的复杂学习成本。

5. Serverless 这种无状态的特性也非常符合微服务使用 Restful API 的特性。

本文将介绍如何通过 Serverless 云函数 的 Web 函数使用 SpringBoot 搭建一个待办应用。

01. 前提条件

请参考云函数 JAVA 开发指南准备开发环境和工具。

02. 创建待办应用

SCF 提供模板函数,按照如下流程操作可快速创建一个待办应用并体验待办事项的增删改查功能。注意:本模板仅作为示例提供,待办事项数据实际存储在实例内存中,不作为持久化存储。

1. 登录云函数 SCF 控制台;

  • 云函数控制台地址:https://console.cloud.tencent.com/scf

2. 选择函数服务 -> 新建 -> 模板创建 -> 搜索关键词springboot,在查询结果中选择「SpringBoot 待办应用」并单击「下一步」,保持默认配置,完成函数创建。

3. 切换到「函数代码」页签,按照如下流程操作,通过测试模板发起模拟请求体验待办应用增删改查功能:

  • 查询待办列表:

请求方式选择 GET,path 填写 /todos,点击「测试」后,在响应 Body 中可以查看到当前的待办事项。

  • 增加待办事项:

请求方式选择 POST,path 填写/todos,body 填写{"key":"3","content":"Third todo","done":false},点击「测试」增加一个待办事项。

  • 删除待办事项:

请求方式选择 DELETE,以删除 key 为 2 的待办事项为例,path 填写 /todos/2,点击「测试」。

  • 修改待办事项:

请求方式选择 PUT,以将 key 为 3 的待办事项由未完成改为完成为例,path 填写 /todos/3,body 填写 {"key":"3","content":"Third todo","done":true},点击「测试」。

03. 代码示例

在 「02.创建待办应用」的第二步模板选择页面,点击模板卡片右上角的「查看详情」,在展开的页面中单击「点击下载模板函数」即可获取模板函数源码。

原生 SpringBoot 项目迁移到 Web 几乎没有改造成本,只需要:

1. 确保 Spring 监听端口为 9000(SCF Web 函数指定监听端口)

2. 编译 JAR 包

下载代码之后,在目录Webfunc-Java8-SpringBoot下运行编译命令:

代码语言:javascript复制
gradle build

编译完成后可在build/libs目录下获取到打包完成的 jar 包,选择后缀为-all的 jar 包。

3. 准备一个可执行文件 scf_bootstrap 用于启动 Web Server,文件内容可参考下文:

代码语言:javascript复制
#!/bin/bash/var/lang/java8/bin/java -Dserver.port=9000 -jar scf-springboot-java8-0.0.2-SNAPSHOT-all.jar

注意:在 scf_bootstrap 文件所在目录执行chmod 755 scf_bootstrap来保证scf_bootstrap 文件具有可执行权限。

4. 将 scf_bootstrap文件与生成的 jar 包一起打包为 zip 部署到云函数。

  • 登录云函数 SCF 控制台;
    • 云函数控制台地址:https://console.cloud.tencent.com/scf
  • 选择函数服务->新建->自定义创建;
  • 函数类型:web 函数
  • 运行环境:Java8
  • 提交方法:本地上传 zip 包
  • 单击上传选择打包好的 zip 文件
  • 其他保持默认配置,单击「完成」即可完成函数创建。

推荐阅读

One More Thing


欢迎进入千人 QQ 群 (871445853) 交流 Serverless!

  • GitHub: github.com/serverless
  • 官网: cloud.tencent.com/product/serverless-catalog

0 人点赞