当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot和application.yml注入映射

戚阳
2023-03-14
@SpringBootApplication
@EnableConfigurationProperties
public class Application implements ApplicationRunner {
    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
    }
}
@Component
@ConfigurationProperties(prefix = "somePrefix")
public class AClass {
    private final AnotherClass anotherClass;
    private final Map<String, Double> aMap;

    @Autowired
    public AffinityChecks(AnotherClass anotherClass,
                          Map<String, Double> aMap) {
        this.anotherClass = anotherClass;
        this.aMap = aMap;
    }

    // Omissis
somePrefix:
  aMap:
    key1: 0.6
    key2: 0.2
    key3: 0.2
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.Map<java.lang.String, java.lang.Double>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

到底是怎么回事?

提前谢了。

共有1个答案

池恩
2023-03-14

Spring Boot不支持绑定到环境的元素的构造函数注入。当然,您可以用通常的方式注入实际的豆子。

您需要将每个要绑定的属性定义为常规Javabean属性(即使用getter/setter)。这个规则有一个例外:映射和非标量值(即嵌套内容)只需要一个getter。

具体地说,如果AnotherClass是bean,FooClass是一些具有嵌套属性的pojo。

@Component
@ConfigurationProperties(prefix = "somePrefix")
public class AClass {
    private final AnotherClass anotherClass;
    private final Map<String, Double> aMap = new HashMap<>();
    private final FooClass foo = new FooClass();

    public AClass(AnotherClass anotherClass) { ...}

    public Map<String, Double> getaMap() { ... }

    public FooClass getFoo() { ... }

}
 类似资料:
  • 问题内容: 我有一个带有以下内容的Spring Boot应用程序-基本上是从这里获取的: 我可以注入特定的值,例如 但是,我想注入整个地图,例如: 那(或类似的东西)可能吗?显然,我可以直接加载yaml,但是想知道Spring是否已经支持了某些东西。 问题答案: 你可以使用插入地图 使用问题中的yaml运行它会产生: 有多种选项可用于设置前缀,控制如何处理缺少的属性等。有关更多信息,请参见java

  • 我有一个带有以下的spring boot应用程序--基本上取自这里: 我可以注入特定的值,例如。 然而,我想注入整个地图,即如下所示: 那(或类似的事情)可能吗?显然,我可以直接加载yaml,但我想知道spring是否已经支持了一些东西。

  • 我引用了Spring boot-inject map from application.yml来从application.yml文件中注入map 下面是我的application.yml代码段 属性文件如下所示 但是,我发现只有当setter和getter的格式正确时才会发生值注入,即getPairMap和setPairMap。在使用getPairs或setpairs时不是这种行为的原因是什么

  • 项目: el-admin 后台 代码如下 deptService 对象没有用过注解, 为什么还能调用 deptService.download ? 有没有大佬知道这个对象是怎么被实例化的? 完整的 DeptController 代码如下

  • 我们使用的是Spring Boot2。 我们想使用Spring Boot的刷新机制,但是由于一个bug我们不能使用,因此我们不得不用和替换所有这些。 所以我们用了: 例如,使用该YAML文件: null 但是我们不能使用其他类型的属性绑定,因为我们正在将这个应用程序部署到kubernetes中,并使用kubernetes的配置映射。 所以我们想知道,是否还有其他机会让与一起工作