三分钟迁移Spring boot工程到Serverless

前言

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

 

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

 

FunctionGraph有明显的成本和维护优势,但是怎样才能把标准的Spring Boot应用程序当做函数在FunctionGraph上运行起来呢?现在以我本地的一个SpringBoot工程(链接https://functionstage-examples.obs.cn-north-1.myhwclouds.com/ServerlessSpringBootDemo.zip)为例展示快速迁移到华为云FunctionGraph的流程。

 

准备工作

下载ServerlessSpringBoot2-1.0.0.jar(链接https://functionstage-examples.obs.cn-north-1.myhwclouds.com/ServerlessSpringBoot2-1.0.0.jar)。

 

迁移流程

01.制作函数zip包

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

 

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

 

02.创建函数

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

 

03.创建APIG触发器

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

 

检验结果

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

注意事项

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信息改为自己的公网访问配置:

 

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

users表结构如下:

 

books表结构如下:

 

总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Function是一个开源项目,它可以让你使用Spring框架构建无服务器(Serverless)函数。Serverless函数可以在云平台上执行,例如AWS Lambda,Azure Functions或Google Cloud Functions。 使用Spring Cloud Function构建Serverless函数非常简单,只需要定义一个函数接口并实现它即可。这个函数接口可以是Java 8函数接口,也可以是Spring框架的Function接口。 下面是一个简单的使用Spring Cloud Function构建Serverless函数的示例: ```java import java.util.function.Function; import org.springframework.cloud.function.adapter.aws.SpringBootRequestHandler; public class MyFunction implements Function<String, String> { public String apply(String input) { return "Hello " + input; } public static void main(String[] args) throws Exception { SpringBootRequestHandler<String, String> handler = new SpringBootRequestHandler<>(MyFunction.class); System.out.println(handler.handleRequest("World", null)); } } ``` 在这个示例中,我们定义了一个MyFunction类,它实现了Function接口。apply方法接收一个String类型的参数并返回一个String类型的结果。 在main方法中,我们使用SpringBootRequestHandler类创建一个处理器,并将MyFunction类作为参数传递给它。然后,我们调用handleRequest方法,将参数"World"传递给它。handleRequest方法会调用MyFunction的apply方法,并返回结果。 当我们将这个函数部署到AWS Lambda上时,我们只需要将MyFunction打包成一个Jar文件并上传到AWS Lambda上。然后,我们可以在AWS Lambda控制台上配置触发器,让这个函数在某个事件发生时执行。 使用Spring Cloud Function构建Serverless函数非常简单,它可以让你使用Spring框架构建高效、可扩展、易于维护的Serverless函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值