三分钟迁移 Spring boot 工程到 Serverless

阅读数:68 2019 年 10 月 22 日 23:22

三分钟迁移Spring boot工程到Serverless

Spring Boot 已成为当今最流行的 Java 后端开发框架,典型的应用方式是在云上购买一台虚拟机,每天 24 小时在上面运行 Java 程序,在这种情况下,用户必须维护自己的虚拟机环境,而且按照包月包年等方式进行付费。

华为云 FunctionGraph(函数工作流服务)有着零运维、低成本计算的特点,FunctionGraph 按需运行代码,无需配置和管理主机,您仅需为代码执行的每 100ms 和次数付费,如果代码没有运行的话,不会产生任何费用,而且每个月还有较多的免费额度。

FunctionGraph 有明显的成本和维护优势,但是怎样才能把标准的 Spring Boot 应用程序当做函数在 FunctionGraph 上运行起来呢?现在以我本地的一个 SpringBoot 工程为例展示快速迁移到华为云 FunctionGraph 的流程。

准备工作

下载 ServerlessSpringBoot2-1.0.0.jar

迁移流程

01 制作函数 zip 包

三分钟迁移Spring boot工程到Serverless

按照上面的动图添加 fgs.properties 配置文件,增加两个配置项 fgs.component-scan 和 fgs.mapper-scan,然后导包。

三分钟迁移Spring boot工程到Serverless

所得的 ServerlessSpringBootDemo.zip 就是最终的函数代码包。

02 创建函数

在华为云入口找到 FunctionGraph 服务,进去后选择创建函数,函数名称建议设置为 Controller 中的根路径,例如本例的 webtest,选择语言为 Java8,另外设置函数执行入口为 com.huawei.fgs.ext.handler.Main.handler,选择 zip 包方式上传代码(或者可以将代码先传入 OBS 桶,使用 OBS 上传方式创建),创建成功。

三分钟迁移Spring boot工程到Serverless

03 创建 APIG 触发器

函数创建完成后修改内存为 1024,修改超时时间为 30(首次启动时间较长)并保存。接下来切换到触发器选项卡,点击创建触发器,选择 APIG,将安全认证改成 NONE,后端超时设置为 30000,和函数超时保持一致,点击确定完成创建。

三分钟迁移Spring boot工程到Serverless

检验结果

直接在浏览器中访问 APIG 生成的 URL,因为 demo 中的 Controller 中并没有匹配 /webtest 路径的 RequestMapping,因此一开始提示找不到路径,稍加修改后可以看到效果:

三分钟迁移Spring boot工程到Serverless

注意事项

1 使用 SpringBoot 的 AOP 特性时,请不要将切面定义到 Controller 层,否则会导致无法使用;

2 目前 Controller 都会视作 RestController,所有的接口均会以 ResponseBody 形式返回,暂时不支持返回 html 页面;

3 在 application.properties 中去掉 server.port 配置,加入 spring.main.web-environment=false 配置项可以小幅提升首次启动速度;

4 如果代码需要经常改动,请将所有的依赖包打包成一个 zip,上传到 OBS,创建函数时填入依赖代码包的地址,后续更新代码时,只需要上传一个小的 jar 包即可;

5 如果业务代码中使用了 filter,需要对代码进行修改,具体方式后续会提供(本 demo 中有简单使用例子,依赖 FunctionGraph 的 Java SDK(链接 https://functionstage-sdk.obs.myhwclouds.com/java-sdk/fss-java-sdk-1.1.0.zip) 中的 Runtime-1.1.0.jar 和 ServerlessSpringBoot2-1.0.0.jar);

6 如果需要使用本 demo 的代码,请先把 application.properties 中的 mysql 信息改为自己的公网访问配置:

三分钟迁移Spring boot工程到Serverless

另外在数据库中创建 users 表和 books 表。

users 表结构如下:

三分钟迁移Spring boot工程到Serverless

books 表结构如下:

三分钟迁移Spring boot工程到Serverless

总结

综上所述,整个迁移过程非常简单,用户无需改造自己的业务代码,只需在资源目录下新增 fgs.properties 文件即可,导包过程和常规情况稍有不同,按照上面的步骤也可以在数秒内完成,最后创建好函数和触发器之后,整个流程就完成了。

本文转载自公众号中间件小哥(ID:huawei_kevin)。

原文链接:

https://mp.weixin.qq.com/s/OFmgR5gg0SxAb4AGUyWf6A

评论

发布