java - Spring Boot - 从 application.yml 注入(inject) map

标签 java spring spring-boot

我有一个 Spring Boot具有以下 application.yml 的应用程序 - 基本上取自 here :

info:
   build:
      artifact: ${project.artifactId}
      name: ${project.name}
      description: ${project.description}
      version: ${project.version}

我可以注入(inject)特定的值,例如

@Value("${info.build.artifact}") String value

不过,我想注入(inject)整个 map ,例如:

@Value("${info}") Map<String, Object> info

这(或类似的)可能吗?显然,我可以直接加载 yaml,但想知道 Spring 是否已经支持。

最佳答案

以下解决方案是@Andy Wilkinson 解决方案的简写,除了它不必使用单独的类或在 @Bean 注释方法上。

application.yml:

input:
  name: raja
  age: 12
  somedata:
    abcd: 1 
    bcbd: 2
    cdbd: 3

SomeComponent.java:

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "input")
class SomeComponent {

    @Value("${input.name}")
    private String name;

    @Value("${input.age}")
    private Integer age;

    private HashMap<String, Integer> somedata;

    public HashMap<String, Integer> getSomedata() {
        return somedata;
    }

    public void setSomedata(HashMap<String, Integer> somedata) {
        this.somedata = somedata;
    }

}

我们可以同时使用 @Value 注释和 @ConfigurationProperties,没有问题。但是 getter 和 setter 很重要,@EnableConfigurationProperties 必须让 @ConfigurationProperties 才能工作。

我从@Szymon Stepniak 提供的 groovy 解决方案中尝试了这个想法,认为它对某人有用。

关于java - Spring Boot - 从 application.yml 注入(inject) map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917194/

相关文章:

java - Tomcat 上的简单 Java Web 应用程序

java - Spring Boot 1.4测试从主要资源加载yaml文件

java - 无法使用用户管理身份凭据从 Azure 函数应用程序发送事件网格事件

java - Linux 在启动时启动 java 程序(EC2 实例)

java - 将 HashMap 键与文本文件中的单词进行比较并更新值

java - Spring中引用传递的问题

java - 将 java 类映射到 Postgresql 表错误

java - 尝试使用 Spring Boots 的 RestTemplate 来使用内容类型 [text/json]

java - 我可以使用反射发现 Java 类的声明内部类吗?

java - android:SharedPreferences不保存数据