【发布时间】:2020-08-04 11:21:32
【问题描述】:
@Singleton
public class TestFunction extends FunctionInitializer {
Logger log = LoggerFactory.getLogger(TestFunction.class);
public TestFunction() {
}
public String execute() {
return "Hello";
}
}
我想以编程方式覆盖 application.yml 文件中的数据源属性,但不使用 bean 创建的事件侦听器。有没有办法做到这一点。就像使用属性创建自定义应用程序上下文一样。
我已将以下方法用于 Micronaut API 网关代理。
public class StreamLambdaHandler implements RequestStreamHandler {
.......
public StreamLambdaHandler() {
try {
log.info("Initializing Lambda Container");
this.dbCredentialService = new DBCredentialService();
// Get updated database credential map
Map<String, Object> props = this.dbCredentialService.getDbCredential();
// Create application context builder with updated properties
// i.e Override datasources properties in application.yml
builder = ApplicationContext.build().properties(props);
handler = new MicronautLambdaContainerHandler(builder);
}....
........
}
我们可以用 FunctionInitializer 做类似的事情吗?
【问题讨论】:
-
“我想以编程方式覆盖 application.yml 文件中的数据源属性...” - 您想从哪里获取覆盖
application.yml中定义的值的新值?了解信息的来源将有助于确定一个好的解决方案。 -
我相信你需要工厂来告诉bean它是如何创建的docs.micronaut.io/latest/api/io/micronaut/context/annotation/…你能提供一个更准确的例子你计划覆盖什么吗?
-
“我相信你需要一个工厂来告诉bean它是如何创建的” - 你不一定需要一个工厂来告诉bean它是如何创建的。有许多方法可以覆盖原本来自
application.yml的值。在运行时了解数据的来源将有助于确定一个好的解决方案。 -
@JeffScottBrown 嗨,我想从 Secrets Manager 获取数据库凭据并将其用于 Hibernate/Hikari。
-
@Traycho Ivanov 正如前面评论中提到的,我必须从 AWS 机密管理器中读取一些机密值并使用它来引导 Hibernate。
标签: java aws-lambda micronaut micronaut-aws