更新时间:2026-01-07 GMT+08:00

Java函数开发指南(使用Eclipse工具)

函数定义

函数有明确的接口定义,如下:

作用域 返回参数 函数名(函数参数,Context参数)

  • 作用域:提供给FunctionGraph调用的用户函数必须定义为public。
  • 返回参数:用户定义,FunctionGraph负责转换为字符串,作为HTTP Response返回。对于返回参数对象类型,HTTP Response该类型的JSON字符串。
  • 函数名:用户定义函数名称。
  • 用户定义参数,当前函数只支持一个用户参数。对于复杂参数,建议定义为对象类型,以JSON字符串提供数据。FunctionGraph调用函数时,解析JSON为对象。
  • Context:runtime提供函数执行上下文,其接口定义在SDK接口说明。

创建Java函数时,函数入口参数需要提供函数完整的名字空间,参数格式为:包名.类名.函数名。

Java的initializer入口介绍

函数服务目前支持以下Java运行环境。

  • Java 8
  • Java 11
  • Java 17
  • Java 21

Initializer格式为:

[包名].[类名].[执行函数名]

示例:创建函数时指定的initializer为com.Demo.my_initializer,那么FunctionGraph会去加载com.Demo包,Demo类中定义的my_initializer函数。

在函数服务中使用Java实现initializer接口,需要定义一个java函数作为initializer入口,一个最简单的initializer示例如下。

public void my_initializer(Context context)

{

RuntimeLogger log = context.getLogger();

log.log(String.format("ak:%s", context.getAccessKey()));

}

  • 函数名

    my_initializer需要与实现initializer接口时的initializer字段相对应。

    示例:实现initializer接口时指定的Initializer入口为com.Demo.my_initializer,那么函数计算会去加载com.Demo包,Demo类中定义的my_initializer函数。

  • context参数

    context参数中包含一些函数的运行时信息,例如:request id、临时AccessKey、function meta等。

SDK接口

FunctionGraph函数JavaSDK提供了Context接口和日志记录接口,SDK下载地址见Java SDK下载

  • Context接口

    Context接口提供函数获取函数执行上下文,例如,用户委托的AccessKey/SecretKey、当前请求ID、函数执行分配的内存空间、CPU数等。

    Context接口说明如表1所示。

    表1 Context类上下文方法说明

    方法名

    方法说明

    getRequestID( )

    获取请求ID。

    getRemainingTimeInMilligetRunningTimeInSecondsSeconds ( )

    获取函数剩余运行时间。

    getAccessKey( )

    获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。

    说明:

    当前函数工作流已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。

    getSecretKey( )

    获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。

    说明:

    当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。

    getSecurityAccessKey( )

    获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。

    getSecuritySecretKey( )

    获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。

    getSecurityToken( )

    获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。

    getUserData(string key)

    通过key获取用户通过环境变量传入的值。

    getFunctionName( )

    获取函数名称。

    getRunningTimeInSeconds ( )

    获取函数超时时间。

    getVersion( )

    获取函数的版本。

    getMemorySize( )

    分配的内存。

    getCPUNumber( )

    获取函数占用的CPU资源。

    getProjectID( )

    获取projectID。

    getPackage( )

    获取函数组。

    getToken( )

    获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。

    getLogger( )

    获取context提供的logger方法(默认会输出时间、请求ID等信息)。

    getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。

  • 日志接口

    Java SDK日志接口日志说明如表2所示。

    表2 日志接口说明表

    方法名

    方法说明

    RuntimeLogger()

    记录用户输入日志。包含方法如下:log(String string)。

开发Java函数

开发Java函数,以下给出使用Eclipse工具的demo示例:

  1. 创建函数工程

    1. 配置Eclipse,创建java工程JavaTest,如图1所示。
      图1 创建工程
    2. 添加工程依赖
      根据Java SDK下载提供的SDK地址,下载JavaRuntime SDK到本地开发环境解压,如图2所示。
      图2 下载SDK解压
    3. 配置依赖

      在工程目录下创建lib目录,将zip中的Runtime-1.1.3.jar拷贝到该目录中,并把该jar添加为工程依赖。如图3所示。

      图3 配置依赖

  2. 创建本地函数

    1. 创建包com.demo,并在包下创建TriggerTests类,如图4所示。
      图4 创建com.demo
    2. 在TriggerTests.java中定义函数运行入口,示例代码如下。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      package com.demo;
      
      import java.io.UnsupportedEncodingException;
      import java.util.HashMap;
      import java.util.Map;
      
      import com.services.runtime.Context;
      import com.services.runtime.entity.smn.SMNTriggerEvent;
      import com.services.runtime.entity.timer.TimerTriggerEvent;
      
      public class TriggerTests {
          public String smnTest(SMNTriggerEvent event, Context context){
              System.out.println(event);
              return "ok";
          }
      
          }
      
          public String timerTest(TimerTriggerEvent event, Context context){
              System.out.println(event);
              return "ok";
          }
      
      }
      

  3. 工程打包

    1. 右击工程,选择“Export”,如图5所示。
      图5 打包
    2. 选择导出为jar,设置导出目录,如图6图7所示。
      图6 选择
      图7 导出

  4. 创建Java函数,上传程序包。
  5. 测试函数

    1. 创建一个定时触发器。
    2. 创建测试事件。

      在事件模板中选择“Timer”,并保存。

    3. 单击“测试”并执行。

      函数执行结果分为三部分,分别为函数返回(由callback返回)、执行摘要、日志输出(由console.log或getLogger()方法获取的日志方法输出)。

  6. 在Java中使用自定义参数类型

    在工程中新建Person类,如图8所示。
    图8 新建Person类
    新建PersonTest.java,并在其中加入入口函数,如图9所示。
    图9 新建PersonTest.java

    导出新包后,在函数界面上单击“选择文件”,将新包上传,修改函数执行入口为“com.demo.PersonTest.personTest”并保存。

    打开配置测试事件对话框,选择空白模板,输入测试事件内容。

    单击“创建”后执行测试。

执行结果

执行结果由3部分组成:函数返回、执行摘要和日志。

表3 执行结果说明

参数项

执行成功

执行失败

函数返回

返回函数中定义的返回信息。

返回包含错误信息和堆栈异常报错信息的JSON文件。格式如下:

{
  "errorMessage": "",
  "stackTrace": []
}

errorMessage:Runtime返回的错误信息

stackTrace:Runtime返回的堆栈异常报错信息

执行摘要

显示请求ID、配置内存、执行时长、实际使用内存和收费时长。

显示请求ID、配置内存、执行时长、实际使用内存和收费时长。

日志

打印函数日志,最多显示4KB的日志。

打印报错信息,最多显示4KB的日志。