Rob*_*ngh 6 java dependency-injection microservices micronaut
我一直在为了学习和一个小规模项目而学习 micronaut,但我一直遇到一个问题。
所以假设我在application.yml文件中有这些数据
output:
-file:
name: PDF
size: 50000
-file:
name: DOCX
size: 35000
Run Code Online (Sandbox Code Playgroud)
所以我的目标是将这些精确的数据映射到 HashMap 中,我可以进一步使用它。我希望我的代码具有独立于任何条件的所有数据。如果我添加另一种文件类型,它也应该自动映射该文件类型的数据。简而言之,最后我想要一个Map<name, path> ,其中包含 yaml 中可用的所有值。我尝试过 EachProperty。
https://guides.micronaut.io/micronaut-configuration/guide/index.html#eachProperty 但我必须传递“名称”作为参数。
任何帮助深表感谢。
micronaut允许驱动应用程序属性的创建,因此它将创建具有从嵌套配置键/值派生的属性的 bean (POJO) 。 @EachPropertyBeanSingleton
使用配置时要考虑的一个重要注意事项@EachProperty是,它仅绑定到顶级配置键,即,创建的 bean 将以嵌套的顶级属性命名,该属性应该是唯一的。
除非更改为以下内容,否则您的配置将无法工作:
output:
# Below config will drive a bean named "pdf", more details below
pdf:
size: 50000
# Below config will drive a bean named "docx"
docx:
size: 35000
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的配置中,该name属性被省略,因为它可以从 bean 配置名称本身派生:
@EachProperty(value = "output")
public class FileType {
private String name;
private int size;
public FileType(@Parameter("name") String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setSize(int size) {
this.size = size;
}
public int getSize() {
return size;
}
@Override
public String toString() {
return "FileType{" +
"name='" + name + '\'' +
", size=" + size +
'}';
}
}
Run Code Online (Sandbox Code Playgroud)
构造函数FileType将注入已配置的 bean 名称(从配置键派生),并且上述类型将在应用程序运行时生成两个 bean:
文件类型{name='pdf',大小=50000} 文件类型{name='docx',大小=35000}
由于这些 Bean 已由micronaut核心容器处理,因此您可以将它们注入到任何其他 Bean 中。
否则,如果您希望将 beans 映射到特定的配置格式(例如 a )Map [NAME -> SIZE],您可以:
Singletonbean 作为配置包装器FileType豆子FileTypeBean 映射到您的自定义格式下面是一个示例配置包装器:
@Singleton
public class FileTypeConfiguration {
private final Map<String, Integer> fileTypes;
@Inject
public FileTypeConfiguration(List<FileType> fileTypes) {
this.fileTypes = fileTypes.stream()
.collect(
Collectors.toMap(FileType::getName, FileType::getSize)
);
}
public Map<String, Integer> getFileTypes() {
return fileTypes;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式访问您的配置FileTypeConfiguration#getFileTypes(FileTypeConfiguration必须@Inject通过 ed 或访问ApplicationContext)。
| 归档时间: |
|
| 查看次数: |
5894 次 |
| 最近记录: |