阿里函数计算(云函数)整合java的springboot

函数计算,就是不需要购买服务器,可以直接布署程序的一个功能,就是将自己开发的springboot程序打包好直接上传可访问。腾讯云和阿里云都有函数计算(腾讯云叫云函数)

腾讯云函数还是比较复杂的,打包是用maven-shade-plugin,还需要创建一个继承AbstractSpringHandler类的子类作为启动类,jar的同目录下还需要创建serverless.yml等配置文件,相当复杂。我是按照文档进行开发,可是最终只能用官方的例子才可以启动,自己用springboot的项目却启动不成功。

无奈之下改用阿里云的函数计算(对应腾讯云的云函数),阿里云这个相对简单,打成的jar包可以用springboot默认的spring-boot-maven-plugin,也不需要创建Handler类作为启动类,也就是直接把自己开发的springboot扔上去就可以了。

开发步骤:

1、登录阿里云官网https://www.aliyun.com/

2、用搜索功能搜索“函数计算”

 

3、选择:应用中心-->Web应用框架-->Java Web

4、这是新建一个web应用,有三种选择方式,代码包、文件夹、使用示例程序。在例用示例程序那里的源代码按钮,可以看到下载下来的是一个标准的spring-boot-maven-plugin打包的jar包

5、我们要运行的是自己的jar包,所以选择“代码包”这一项。为方便起见,默认配置的9000端口也不要改,我们的springboot程序也用9000这个端口。(我自己试过改成8080端口,却报了一个找不到9000端口的错误,但我在配置中的确是已经修改了8080端口)

#!/usr/bin/env bash
export PORT=9000
java -jar -Dserver.port=$PORT code.jar

看这些代码,有点像创建了一个docker镜像,然后在镜像中启动java程序

springboot的yml配置文件如下:

server:port: 9000

 

下图为我改了端口8080,却报错的截图:

 

6、最后点击布署就可以了,它会自动布署,并返回一个可以访问的地址:

7、代码:

项目结构:

pom.xml


4.0.0org.springframework.bootspring-boot-starter-parent2.5.1 com.exampleali-fc-demodemo阿里云函数示例1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-maven-plugin

application.yml

server:port: 9000
DemoApplication
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
DemoController
package com.example.demo.controller;import javax.servlet.http.HttpServletRequest;import com.example.demo.util.ResultJSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/demo")
public class DemoController{@GetMapping("/test")public @ResponseBodyResultJSONObject test(HttpServletRequest request) throws Exception {return ResultJSONObject.success("这是云函数测试");}
}
ResultJSONObject
package com.example.demo.util;import java.util.List;import com.fasterxml.jackson.annotation.JsonIgnore;public class ResultJSONObject {private String status;		//状态码private String message;		//状态信息private Object data;		//返回数据public ResultJSONObject(String status, String message, Object data) {super();this.status = status;this.message = message;this.data = data;}/*** 成功* @param object* @return*/public static ResultJSONObject success(Object object) {String msg = "ok";if(null != object) {if(object instanceof String) {msg = (String) object;}}return new ResultJSONObject("200", msg, object);}/*** 成功* @param object* @return*/public static ResultJSONObject success(String message, Object object) {return new ResultJSONObject("200", message, object);}public ResultJSONObject() {super();}/*** 200(ok)* 500(Exception)* 404(Exception)*/public String getStatus() {return status;}/*** 200(ok)* 500(Exception)* 404(Exception)*/public void setStatus(String status) {this.status = status;}/*** ok(200)* Exception(404、500)*/public String getMessage() {return message;}/*** ok(200)* Exception(404、500)*/public void setMessage(String message) {this.message = message;}/*** 自定义的数据返回* @return*/public Object getData() {return data;}/*** 自定义的数据返回* @param data*/public void setData(Object data) {this.data = data;}@Overridepublic String toString() {return "ResultJSONObject [status=" + status + ", message=" + message + ", data=" + data + "]";}}

 

以上就是配置过程


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部