阿里云函数计算配合SpringBoot项目

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 作者:DecentAnt首先要弄清楚,阿里云的函数计算项目和SpringBoot项目是两个完全独立的项目体系,阿里云函数计算项目的打包后的大小不能超过50M,而SpringBoot的项目大小无所谓。

作者:DecentAnt

首先要弄清楚,阿里云的函数计算项目和SpringBoot项目是两个完全独立的项目体系,阿里云函数计算项目的打包后的大小不能超过50M,而SpringBoot的项目大小无所谓。

  1. SpringBoot项目
    首先是SpringBoot项目,这个项目和一般的SpringBoot项目一样,但是数据库必须是阿里云可以连接到的数据库,可以是阿里云内网数据库(我没试过),也可以是公网能够访问的数据库(我用的就是这种),项目配置和普通的SpringBoot项目一模一样,不用什么修改。

为了测试方便,我只用了一个汽车品牌表来做了这个实验,项目内容非常简单,其中有两个接口,一个是CarBrandAdd另一个是CarBrandList,请求方式是POST+Body(raw application/json),也就是直接用Body中的json字符串进行请求。
两个Controller如下:
image1
image2

其中Service中的业务逻辑我就不贴出来了,就是最最简单的添加和列表操作

application.properties中数据库配置如下:
image3

也就是最一般的数据库配置罢了

之后就是用Maven打包了,我这里使用了idea的Maven打包方式,注意要打成war包:
war
我这里采用了阿里云文档中推荐的打包插件:(经过测试发现不用这种也是可以的,只是这样打包包的体积比较小罢了)

<plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <appendAssemblyId>false</appendAssemblyId> <!-- this is used for not append id to the jar name -->
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

然后就可以打包了,点击IDEA的Maven打包,或者输入:
image4
mvn package
image5

最后将这个war包上传到阿里云的OSS上去

  1. 阿里云函数计算项目
    这个项目是用来调用SpringBoot项目用的,其实相当于客户端的作用

创建一个Maven项目,注意依赖关系:

<dependency>
    <groupId>com.aliyun.fc.runtime</groupId>
    <artifactId>fc-java-core</artifactId>
    <version>1.3.0</version>
</dependency>
<dependency>
    <groupId>com.aliyun.fc.runtime</groupId>
    <artifactId>fc-java-common</artifactId>
    <version>1.0.0</version>
</dependency>

然后创建HelloWeb类,实现FunctionInitializer, HttpRequestHandler接口,我这里使用OSS的方式调用SpringBoot的war包,这里只要填写正确就行。
其中最让我纠结的就是userContextPath这个参数,结果发现这个参数填什么都没问题……根本不用管它。

public class HelloWeb implements FunctionInitializer, HttpRequestHandler {

private FcAppLoader fcAppLoader = new FcAppLoader();
private String ossEndPoint = "${YourEndPoint}";
private String bucket = "${YourBucket}";
private String key = "alifc.war";

//    private String userContextPath = "/2016-08-15/proxy/{YourServideName}/{YourFunctionName}";
private String userContextPath = "/2016-08-15/proxy/helloweb.LATEST/testweb3/carBrandList";

@Override
public void initialize(Context context) throws IOException {
    FunctionComputeLogger fcLogger = context.getLogger();
    fcAppLoader.setFCContext(context);
    fcLogger.info("Begin load code: "+key);
    // Load code from OSS
    fcAppLoader.loadCodeFromOSS(ossEndPoint, bucket, key);
    fcLogger.info("End load code");
    // Init webapp from code
    long timeBegin = System.currentTimeMillis();
    fcLogger.info("Begin load webapp");
    fcAppLoader.initApp(userContextPath, HelloWeb.class.getClassLoader());
    fcLogger.info("End load webapp, elapsed: " + (System.currentTimeMillis() - timeBegin) + "ms");
}

@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response, Context context)
        throws IOException, ServletException {
    try {
        fcAppLoader.forward(request, response);
        String requestPath = (String) request.getAttribute("FC_REQUEST_PATH");
        String requestURI = (String) request.getAttribute("FC_REQUEST_URI");
        String requestClientIP = (String) request.getAttribute("FC_REQUEST_CLIENT_IP");

        FunctionComputeLogger logger = context.getLogger();
        logger.info("requestPath is "+requestPath);
        logger.info("requestURI is "+requestURI);
        logger.info("requestClientIP is "+requestClientIP);

        String body = String.format("Path: %s\n Uri: %s\n IP: %s\n", requestPath, requestURI, requestClientIP);
        OutputStream out = response.getOutputStream();
        out.write((body).getBytes());
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

}
这个项目已经建立完成了。

然后同样的使用Maven进行打包,打包插件使用和SpringBoot一样的打包插件即可
image8

  1. 阿里云增加函数计算
    新建一个函数计算服务:

image9

创建完成服务后,创建一个函数
选择java8,使用空白函数
image10

触发器配置中选择HTTP触发器,注意:HTTP触发器只能在创建函数时创建!创建完成函数后无法再创建了!!
我这里使用POST请求
image11

基础管理配置中上传函数计算打完了war包(不是SpringBoot的war包!!)
最关键的是环境配置,注意:一定要打开“是否配置函数初始化入口”
image12
image13
image14

(其中马赛克掉的是包名)

权限配置可以跳过,最后创建即可。

  1. 执行函数计算
    填入相关请求路径信息,然后点击执行即可,注意类型不要选错了

image15

查看数据库是否添加成功:
image16

测试列表接口:
_

注意:如果要换函数计算的war的话,需要选择文件后,点击保存才行,否则无法生效。

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
1月前
|
人工智能 机器人 Serverless
安诺机器人 X 阿里云函数计算 AI 咖啡印花解决方案
当云计算遇见具身智能,AI咖啡开启零售新体验。用户通过手机生成个性化图像,云端AI快速渲染,机器人精准复刻于咖啡奶泡之上,90秒内完成一杯可饮用的艺术品。该方案融合阿里云FunctionAI生图能力与安诺机器人高精度执行系统,实现AIGC创意到实体呈现的闭环,为线下零售提供低成本、高互动、易部署的智能化升级路径,已在商场、机场、展馆等场景落地应用。
安诺机器人 X 阿里云函数计算 AI 咖啡印花解决方案
|
14天前
|
人工智能 运维 安全
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
阿里云推出以函数计算为核心的AgentRun平台,通过创新体系解决开发、部署、运维难题,提供全面支持,已在多个真实业务场景验证,是AI原生时代重要基础设施。
|
1月前
|
消息中间件 运维 监控
爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
阿里云 Kafka 不仅为尚娱提供了高可靠、低延迟的消息通道,更通过 Serverless 弹性架构实现了资源利用率和成本效益的双重优化,助力尚娱在快速迭代的游戏市场中实现敏捷运营、稳定交付与可持续增长。
116 21
|
1月前
|
消息中间件 存储 运维
嘉银科技基于阿里云 Kafka Serverless 提升业务弹性能力,节省成本超过 20%
云消息队列 Kafka 版 Serverless 系列凭借其秒级弹性扩展、按需付费、轻运维的优势,助力嘉银科技业务系统实现灵活扩缩容,在业务效率和成本优化上持续取得突破,保证服务的敏捷性和稳定性,并节省超过 20% 的成本。
133 22
|
25天前
|
人工智能 运维 安全
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
云原生应用平台 Serverless 计算负责人杨皓然在云栖大会发表主题演讲“Serverless Agent 基础设施:助力大规模 Agent 部署与运维”。本议题深入介绍了阿里云以函数计算为核心打造的 Agent 基础设施——AgentRun,阐述其如何通过创新的运行时、模型服务、网关及可观测体系,为企业构筑坚实、高效、安全的 Agent 时代基石。
|
2月前
|
运维 NoSQL Serverless
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
在轻休闲游戏流量波动大、生命周期短的背景下,传统架构难以应对成本与扩展挑战。本文介绍了基于阿里云函数计算 FC 和 Redis 构建的新一代服务器架构,实现弹性伸缩、成本优化与高效运维,助力轻休闲游戏快速迭代与稳定运营,提升开发效率并降低运维复杂度。
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
|
DataWorks 数据挖掘 Serverless
阿里云EMR Serverless StarRocks 内容合集
阿里云 EMR StarRocks 提供存算分离架构,支持实时湖仓分析,适用于多种 OLAP 场景。结合 Paimon 与 Flink,助力企业高效处理海量数据,广泛应用于游戏、教育、生活服务等领域,显著提升数据分析效率与业务响应速度。
176 0
|
1月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
273 12
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
618 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
244 0

热门文章

最新文章