示例程序架构和准备工作
文章中的示例将分为以下几个步骤:
配置 ACM 和 RAM,设置 ECS RAM Role,并进行 ACM 授权,来授权 ECS 上的应用免 AK/SK(即 AccessKey/SecretKey) 来调用 ACM;
读取配置程序编写:使用 ACM Java SDK 动态读取配置内容,来进行数据库配置。
其中,程序中不含任何敏感配置,如数据库连接串,阿里云 AK/SK等;
数据库连接串在 ACM 上动态刷新,应用不停机。
程序代码架构如下图所示:

开始前,用户应准备好:
在阿里云上购买 ECS;
在阿里云上开通 ACM, RAM 等免费服务产品;
准备好数据库,可在阿里云上开通数据库或在 ECS 上自行搭建,数据库里面可准备好一张 user 表,并准备若干记录;
准备好可访问数据库的 Java 应用程序 (或从这里下载完整代码示例下载)。
配置ACM和RAM
该章节分为两个部分:
在 ACM 中配置相关敏感信息;
通过 RAM 设置用户的 ECS 的 RAM Role;
在 ACM 控制台中创建配置
代码示例所需数据库连接的配置
Data ID:
com.alibaba.cloud.acm:jdbc-sample.properties
Group:非必选,在“更多高级选项”中,默认值为“DEFAULT_GROUP”
DEFAULT_GROUP
配置内容, 可根据实际情况进行配置:
jdbc.url=xxx
jdbc.username=xxx
jdbc.password=xxx

配置 ECS RAM Role
在ACM程序访问中,用户可设置 AccessKey、SecretKey 属性的方式来访问 ACM 产品,但是在本文中推荐通过“ECS 实例角色”的方式来访问ACM。该方式自动获取临时凭证,提高安全性和降低运维成本,凭证周期由 ACM SDK 自动维护,应用运行时只需设置 JVM 参数“-Dram.role.name=ramRoleName”,
ramRoleName 为授予该 ECS 的 RAM 角色名称,如 ECS-RAM。运行命令如下:
java -jar -Dram.role.name=ECS-RAM sample-1.0-SNAPSHOT-jar-with-dependencies.jar
关于如何设置 ECS 实例角色,请参考“ECS 实例角色”文章。为减少文章篇幅,本文不赘述了。
读取配置程序编写
该章节分为三个部分:
在 ACM 中初始化 ACM 连接,用户仅需填写配置信息,无需填写 AK/SK 敏感信息;
读取 ACM 配置,并监听配置变化;
相关业务代码编写,根据需求建立数据库连接并查询数据;
在程序中初始化 ACM,并读取相关配置
namespace:命名空间 ID,在控制台“命名空间详情”的“命名空间ID”处可以获取到
endpoint: ACM 连接域,在控制台“命名空间详情”的“End Point”处可以获取到

通过 ACM 获取配置并监听配置变化
获取数据库连接配置的内容,并且添加配置监听器。当数据库连接配置的内容需要变更,在 ACM 控制台修改后,程序实时接收到新的内容,新的数据库连接也实时生效,不中断程序的运行。
dataId:刚刚新建配置时 Data ID 所填写的值
group:刚刚新建配置时 Group 所填写的值,默认为“DEFAULT_GROUP”,隐藏在“更多高级选项”中

建立数据库连接并查询数据
从 ACM 获取到的连接数据库所需的地址、用户名、密码,通过 MySQL JDBC 驱动包“mysql-connector-java”与 MySQL 服务建立连接。接着,再查询“user”表的总记录数,返回给函数调用者。
注: 程序中使用的连接信息为ACM中保存的最新的数据库连接信息,连接信息通过上面的ACM的监听配置程序进行动态刷新,从而保证为最新。

测试运行
如果你按照本片文章前面工作,完成了 ECS RAM Role 设置和授权以后,可在不设置任何 AK/SK 情况下,将程序实例打包成可执行 jar 后,上传到对应的 ECS 环境上运行即可。当程序运行时,如 如何在阿里云上安全的存放您的配置 - 续 文章所描述的,程序将自动获取临时凭证访问 ACM,凭证周期由 ACM SDK 自动维护。应用运行时只需设置 JVM 参数“-Dram.role.name=ramRoleName”,
ramRoleName 为授予该 ECS 的 RAM 角色名称,如 ECS-RAM。运行命令如下:
java -jar -Dram.role.name=ECS-RAM sample-1.0-SNAPSHOT-jar-with-dependencies.jar
本代码示例通过 ACM 控制台配置 JDBC 的连接属性,再使用 ACM Java SDK 读取配置内容,与 MySQL 建立连接,查询“用户”数据,最后将结果打印出来,控制台输出内容如下:
注:如果是在您自己电脑上或本地测试,需要手动设置 AccessKey、SecretKey 属性,才可以访问 ACM 产品,目前支持三种设置方式,本示例可使用环境变量,如下:
spas_accessKey=xxx
spas_secretKey=xxx
文章中的示例将分为以下几个步骤:
配置 ACM 和 RAM,设置 ECS RAM Role,并进行 ACM 授权,来授权 ECS 上的应用免 AK/SK(即 AccessKey/SecretKey) 来调用 ACM;
读取配置程序编写:使用 ACM Java SDK 动态读取配置内容,来进行数据库配置。
其中,程序中不含任何敏感配置,如数据库连接串,阿里云 AK/SK等;
数据库连接串在 ACM 上动态刷新,应用不停机。
程序代码架构如下图所示:

开始前,用户应准备好:
在阿里云上购买 ECS;
在阿里云上开通 ACM, RAM 等免费服务产品;
准备好数据库,可在阿里云上开通数据库或在 ECS 上自行搭建,数据库里面可准备好一张 user 表,并准备若干记录;
准备好可访问数据库的 Java 应用程序 (或从这里下载完整代码示例下载)。
配置ACM和RAM
该章节分为两个部分:
在 ACM 中配置相关敏感信息;
通过 RAM 设置用户的 ECS 的 RAM Role;
在 ACM 控制台中创建配置
代码示例所需数据库连接的配置
Data ID:
com.alibaba.cloud.acm:jdbc-sample.properties
Group:非必选,在“更多高级选项”中,默认值为“DEFAULT_GROUP”
DEFAULT_GROUP
配置内容, 可根据实际情况进行配置:
jdbc.url=xxx
jdbc.username=xxx
jdbc.password=xxx

配置 ECS RAM Role
在ACM程序访问中,用户可设置 AccessKey、SecretKey 属性的方式来访问 ACM 产品,但是在本文中推荐通过“ECS 实例角色”的方式来访问ACM。该方式自动获取临时凭证,提高安全性和降低运维成本,凭证周期由 ACM SDK 自动维护,应用运行时只需设置 JVM 参数“-Dram.role.name=ramRoleName”,
ramRoleName 为授予该 ECS 的 RAM 角色名称,如 ECS-RAM。运行命令如下:
java -jar -Dram.role.name=ECS-RAM sample-1.0-SNAPSHOT-jar-with-dependencies.jar
关于如何设置 ECS 实例角色,请参考“ECS 实例角色”文章。为减少文章篇幅,本文不赘述了。
读取配置程序编写
该章节分为三个部分:
在 ACM 中初始化 ACM 连接,用户仅需填写配置信息,无需填写 AK/SK 敏感信息;
读取 ACM 配置,并监听配置变化;
相关业务代码编写,根据需求建立数据库连接并查询数据;
在程序中初始化 ACM,并读取相关配置
namespace:命名空间 ID,在控制台“命名空间详情”的“命名空间ID”处可以获取到
endpoint: ACM 连接域,在控制台“命名空间详情”的“End Point”处可以获取到

通过 ACM 获取配置并监听配置变化
获取数据库连接配置的内容,并且添加配置监听器。当数据库连接配置的内容需要变更,在 ACM 控制台修改后,程序实时接收到新的内容,新的数据库连接也实时生效,不中断程序的运行。
dataId:刚刚新建配置时 Data ID 所填写的值
group:刚刚新建配置时 Group 所填写的值,默认为“DEFAULT_GROUP”,隐藏在“更多高级选项”中

建立数据库连接并查询数据
从 ACM 获取到的连接数据库所需的地址、用户名、密码,通过 MySQL JDBC 驱动包“mysql-connector-java”与 MySQL 服务建立连接。接着,再查询“user”表的总记录数,返回给函数调用者。
注: 程序中使用的连接信息为ACM中保存的最新的数据库连接信息,连接信息通过上面的ACM的监听配置程序进行动态刷新,从而保证为最新。

测试运行
如果你按照本片文章前面工作,完成了 ECS RAM Role 设置和授权以后,可在不设置任何 AK/SK 情况下,将程序实例打包成可执行 jar 后,上传到对应的 ECS 环境上运行即可。当程序运行时,如 如何在阿里云上安全的存放您的配置 - 续 文章所描述的,程序将自动获取临时凭证访问 ACM,凭证周期由 ACM SDK 自动维护。应用运行时只需设置 JVM 参数“-Dram.role.name=ramRoleName”,
ramRoleName 为授予该 ECS 的 RAM 角色名称,如 ECS-RAM。运行命令如下:
java -jar -Dram.role.name=ECS-RAM sample-1.0-SNAPSHOT-jar-with-dependencies.jar
本代码示例通过 ACM 控制台配置 JDBC 的连接属性,再使用 ACM Java SDK 读取配置内容,与 MySQL 建立连接,查询“用户”数据,最后将结果打印出来,控制台输出内容如下:
注:如果是在您自己电脑上或本地测试,需要手动设置 AccessKey、SecretKey 属性,才可以访问 ACM 产品,目前支持三种设置方式,本示例可使用环境变量,如下:
spas_accessKey=xxx
spas_secretKey=xxx