阿里函数计算(云函数)整合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.0 org.springframework.boot spring-boot-starter-parent 2.5.1 com.example ali-fc-demo demo 阿里云函数示例 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-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 + "]";}}
以上就是配置过程
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
