如何从 AWS lambda java 中的类路径加载属性文件

Posted

技术标签:

【中文标题】如何从 AWS lambda java 中的类路径加载属性文件【英文标题】:How to load property file from classpath in AWS lambda java 【发布时间】:2016-05-23 05:23:48 【问题描述】:

我已经编写了 AWS lambda 函数,我想从属性文件和类路径中读取数据库连接详细信息,但我无法加载该文件。这是我的代码:

InputStream input = DBConfiguartion.class.getResourceAsStream("appsettings");

        Reader r = new InputStreamReader(input, "UTF-8");
        Properties prop = new Properties();
        prop.load(r);

如果我当时通过普通的 Java 控制台应用程序运行此代码,它正在工作,但每当我将它作为 AWS lambda 函数运行时 InputStream 即将为空。

【问题讨论】:

【参考方案1】:

你只差一个角色。这是一个我必须做同样事情的工作示例:

InputStream is = DBConfiguartion.class.getResourceAsStream("/lambda.properties");
Properties properties = new Properties();
properties.load(is);

在构建部署 jar 时,这适用于以下 maven 文件结构:

项目 project/src/main/java project/src/main/java/com/something/DBConfiguartion.java - project/src/main/resources project/src/main/resources/lambda.properties

【讨论】:

我遇到了与问题描述中指定的相同的问题。现在,当我将属性文件名更改为以正斜杠(/)开头时,我的本地 JUnit 测试失败了。 @greg 。你能在下面查看 UdoHeld 的解决方案吗?他建议使用 ResourceBundle【参考方案2】:

当您要加载属性文件时,您可以使用ResourceBundle 来加载属性。

String version = ResourceBundle.getBundle("lambda").getString("version");

这与将文件加载为InputStream 不同,但这对我有用。在 Maven 项目中,该文件需要位于:

project/src/main/resources/lambda.properties

我有一个简单的 Hello-World Lambda,它从 github 上的属性文件中读取当前版本。

【讨论】:

嗨,Udo.. 谢谢你的建议。我以前不知道 ResourceBundle

以上是关于如何从 AWS lambda java 中的类路径加载属性文件的主要内容,如果未能解决你的问题,请参考以下文章

如何确定AWS Lambda函数中的当前区域?

如何使用API 参考对AWS Lambda进行API调用

如何通过忽略未使用的资源从 aws cli 创建 aws java lambda 函数?

从 Java AWS lambda API 响应中的字节数组返回图像

如何从账户 A 中的 Lambda(VPC 中的 Lambda)调用账户 B 中的 AWS Lambda 函数(VPC 中的这个 Lambda)

Terraform:为调用 Lambda 的 AWS API Gateway 创建 url 路径参数?