dengjia f6f1436194 Initial commit 1 miesiąc temu
..
assets f6f1436194 Initial commit 1 miesiąc temu
src f6f1436194 Initial commit 1 miesiąc temu
target f6f1436194 Initial commit 1 miesiąc temu
README.md f6f1436194 Initial commit 1 miesiąc temu
dependency-reduced-pom.xml f6f1436194 Initial commit 1 miesiąc temu
pom.xml f6f1436194 Initial commit 1 miesiąc temu
readme_s.md f6f1436194 Initial commit 1 miesiąc temu
readme_s_en.md f6f1436194 Initial commit 1 miesiąc temu
s.yaml f6f1436194 Initial commit 1 miesiąc temu
s_en.yaml f6f1436194 Initial commit 1 miesiąc temu

README.md

java11 mysql示例

本示例为您展示了Java runtime的mysql使用示例。 在本示例中,mysql数据库配置在函数的环境变量配置中(参考s.yaml),initializer 回调函数从环境变量中获取数据库配置,创建mysql连接,preStop 回调函数负责关闭mysql连接。

本示例使用MySQL Connector/J 8.0版本,支持MySQL 5.7 and 8.0,版本兼容详情见 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html

MySQL Connector/J 8.0 Developer Guide: https://dev.mysql.com/doc/connector-j/8.0/en/

准备开始

  • 一个可用的mysql数据库,可以参考以下sql创建表并插入测试数据

    CREATE TABLE `users` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(20) NOT NULL,
    `age` tinyint(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `users` (`id`, `name`, `age`) VALUES
    (1, '张三', 18),
    (2, '李四', 28);
    
  • [可选] 安装并配置 Serverless Devs 工具。(https://help.aliyun.com/document_detail/195474.html)

快速开始

方式一、使用 Serverless Devs 工具编译部署

1. 修改 s.yaml 配置

  • 根据需要修改 access 配置
  • 修改 environmentVariables 配置,填入 JDBC_URL, JDBC_USER 和 JDBC_PASSWORD
  • 使用 initialize 和 prestop 回调,需要在 s.yaml 中配置

        initializationTimeout: 60
        initializer: example.App::initialize
        instanceLifecycleConfig:
          preStop:
            handler: example.App::preStop
            timeout: 60
    

2. 安装依赖并部署

在 pom.xml 中添加 mysql 依赖,如下所示(在示例pom.xml中已添加该依赖)

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

编译部署代码包

s deploy

注意: s.yaml 文件中有配置 pre-deploy 脚本, 该脚本会在部署前会调用 mvn package 编译。

3. 调用测试

s invoke

调用函数时收到的响应如下所示:

========= FC invoke Logs begin =========
FC Initialize Start RequestId: 9fe60072-7fe2-4f62-9d13-xxxxxxx
[Name] Register [com.aliyun.serverless.runtime.classloader.FunctionClassLoader@58372a00] as [com.aliyun.serverless.runtime.classloader.FunctionClassLoader@com.aliyun.serverless.runtime.classloader.FunctionClassLoader@/code/HelloFCJava-1.0-SNAPSHOT.jar/code/original-HelloFCJava-1.0-SNAPSHOT.jar]: hash [8bbd2e0] (normal mode)
2022-07-19 04:21:54.577 [INFO] [9fe60072-7fe2-4f62-9d13-62fc04156f77] database connection time cost: 397ms
FC Initialize End RequestId: 9fe60072-7fe2-4f62-9d13-xxxxxxx
FC Invoke Start RequestId: 7581b7c4-bb40-4690-90d6-xxxxxxx
2022-07-19 04:21:59.539 [INFO] [7581b7c4-bb40-4690-90d6-xxxxxxx] Success - 1 rows affected.
2022-07-19 04:21:59.613 [INFO] [7581b7c4-bb40-4690-90d6-xxxxxxx] get user: {name=王五, id=3, age=5}
FC Invoke End RequestId: 7581b7c4-bb40-4690-90d6-xxxxxxx

Duration: 108.03 ms, Billed Duration: 109 ms, Memory Size: 128 MB, Max Memory Used: 109.13 MB
========= FC invoke Logs end =========

FC Invoke instanceId: c-62d63161-a82af772bxxxxxxx

FC Invoke Result:
{name=王五, id=3, age=5}


End of method: invoke

方式二、使用控制台创建

1. 编译打包

# 编译部署
mvn package
# 打包文件
cd target && zip -r java11-mysql.zip *

2. 创建函数

选择服务(或创建服务)后,单击创建函数,如图所示

  • 选择 从零开始创建
  • 填入函数名称
  • 选择运行环境 java11/java8
  • 选择函数触发方式:通过事件请求触发
  • 其他设置使用默认

详细创建函数流程见文档: 使用控制台创建函数

3. 设置initializer/preStop回调函数配置和环境变量配置

回调函数配置 img_1.png

环境变量配置

img_2.png

4. 测试函数

返回结果如下所示

{name=王五, id=3, age=5}

数据库访问限制

当使用云数据库时,一般都会有访问控制,比如阿里云数据库RDS中的白名单设置( RDS白名单设置说明 )。

如果仅仅作为测试,可以将白名单配置成 0.0.0.0/0。(不要在生产环境使用!)

在生产环境,可以使用以下两种方式访问:

  1. VPC方式(推荐
    参考文档:https://help.aliyun.com/document_detail/84514.html
  2. 代理方式
    参考文档:https://help.aliyun.com/document_detail/91243.html

备注

  1. 本示例不是连接池方式,若要使用连接池,可以参考文档 Connection Pooling with Connector/J