|
|
1 mês atrás | |
|---|---|---|
| .. | ||
| assets | 1 mês atrás | |
| src | 1 mês atrás | |
| target | 1 mês atrás | |
| README.md | 1 mês atrás | |
| dependency-reduced-pom.xml | 1 mês atrás | |
| pom.xml | 1 mês atrás | |
| readme_s.md | 1 mês atrás | |
| readme_s_en.md | 1 mês atrás | |
| s.yaml | 1 mês atrás | |
| s_en.yaml | 1 mês atrás | |
本示例为您展示了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)
使用 initialize 和 prestop 回调,需要在 s.yaml 中配置
initializationTimeout: 60
initializer: example.App::initialize
instanceLifecycleConfig:
preStop:
handler: example.App::preStop
timeout: 60
在 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编译。
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
# 编译部署
mvn package
# 打包文件
cd target && zip -r java11-mysql.zip *
选择服务(或创建服务)后,单击创建函数,如图所示
从零开始创建详细创建函数流程见文档: 使用控制台创建函数
环境变量配置
返回结果如下所示
{name=王五, id=3, age=5}
当使用云数据库时,一般都会有访问控制,比如阿里云数据库RDS中的白名单设置( RDS白名单设置说明 )。
如果仅仅作为测试,可以将白名单配置成 0.0.0.0/0。(不要在生产环境使用!)
在生产环境,可以使用以下两种方式访问: