如何在Micronaut中读取应用程序属性?

11

我按照指南在Micronaut Groovy应用程序中集成了AWS SES API,发送邮件,如果我直接分配属性的值,则能够发送邮件。

我想通过配置来实现发送邮件,因此一直在尝试寻找方法。

我尝试过指南中提到的@Value注解,但无法使其工作。

@Value("aws.secretkeyid")
String keyId
进一步查阅文档后发现Micronaut有自己的注解来将属性注入变量中。

进一步查阅文档后发现Micronaut有自己的注解来将属性注入变量中。

@Property(name="aws.secretkeyid")
String keyId

但是似乎什么都不起作用,我的变量仍然为空。

可能出了什么问题?

供参考,以下是我的application.yml文件内容:

aws:
  keyid: "2weadasdwda"
  secretkeyid: "abcdesdasdsddddd"
  region: "us-east-1"
2个回答

22

您的使用方法不正确,您正在注入字面值aws.secretkeyid,而不是变量的值。

正确的语法是(Groovy):

@Value('${aws.secretkeyid}')
String keyId

请注意,为了避免Groovy尝试插值,您必须使用单引号。

Java:

@Value("${aws.secretkeyid}")
String keyId;

Kotlin:

@Value("\${aws.secretkeyid}")
keyId: String

请注意,在Kotlin字符串模板中,您必须使用反斜杠来转义美元符号


1
你提到的语法是Java的,而不是Groovy的。 我按照[在Micronaut中发送邮件]文档中的内容尝试了第一件事,但是如果使用上述语法,代码甚至无法编译。 - Aditya T
1
我发布的语法是针对Groovy的,确实可以编译。请注意,您必须使用单引号来避免Groovy尝试插值。 - Álvaro Sánchez-Mariscal
1
确实,你说得对。我犯了一个错误,使用了双引号而不是单引号。 尽管由于我的这个愚蠢错误,我最终升级了Micronaut版本到1.0.1,并使用了@Property(name = "aws.secretkeyid") :D - Aditya T
我本来想自己回答,但你的答案符合问题。 :) - Aditya T
1
只是好奇想知道,如果我有一个不同于application.yml的文件名,我需要如何访问不同文件名中存在的属性。 - Mohamed Niyaz Sirajudeen

9
如果其他人也遇到了这个问题,你也可以使用Micronaut中的@Property注解(从版本1.0.1开始)。语法如下:
@Property(name = "your.application.property")
String propertyName

注意:这是Micronaut文档中提到的内容,但在我的情况下并不起作用,因为我使用的是Micronaut版本1.0.0。


你需要在application.properties文件中添加属性。基于这个链接:http://mrhaki.blogspot.com/2018/10/micronaut-mastery-configuration.html - sfgroups

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接