阿里函数计算(云函数)整合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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.5.1</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>ali-fc-demo</artifactId>
	<name>demo</name>
	<description>阿里云函数示例</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

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 @ResponseBody
	ResultJSONObject 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;
	}

	@Override
	public String toString() {
		return "ResultJSONObject [status=" + status + ", message=" + message + ", data=" + data + "]";
	}

	
	
}

 

以上就是配置过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值