繁体   English   中英

使用相同的配置属性在 ConfigurationProperties class 中声明 bean

[英]Declaring beans inside a ConfigurationProperties class, using the same configuration property

我有一个名为UserData的 java class,它有一个名为users的字段,我正在通过使用@ConfigurationProperties注释从我的 spring-boot 应用application.yml中的 application.yml 读取它。

在这个 class 中,我想声明另一个 bean 来查找最老的用户。 当我尝试创建getOldestUser bean 时,我在getOldestUser bean 的初始化中得到一个NullPointerException ,因为users变量是null

这是我的代码的样子:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@Configuration
@ConfigurationProperties
@EnableConfigurationProperties
public class UserData {
    Map<String, Integer > users;

    @Bean
    public String getOldestUser() {
        Integer maxAge = 0;
        String oldestUser = null;
        for (Map.Entry<String, Integer> entry : users.entrySet()) { // This line throws NPE, because 'users' is null
            if(entry.getValue() > maxAge) {
                oldestUser = entry.getKey();
                maxAge = entry.getValue();
            }
        }
        return oldestUser;
    }
}

这是 application.yml 中的用户声明:

users:
  joey: 32
  jim: 29

我如何访问方法 bean getOldestUser中的 class bean userData的字段? 我还尝试将userData bean 作为参数传递给此方法,但这也不起作用。

首先,尝试将配置部分从属性拆分为单独的类。

此外, @ConfigurationProperties注释需要有一个前缀,它将所有子属性绑定到字段。

最后,您作为 spring bean 创建的方法getOldestUser只是一个计算 function,它可以在UserProperties class 下,并在您需要此数据时调用,不需要 spring:)。

data:
  users:
    joey: 32
    jim: 29
@Getter
@Setter
@ConfigurationProperties(prefix = "data")
public class UserProperties{
    private Map<String, Integer > users;

    public String getOldestUser() {
        Integer maxAge = 0;
        String oldestUser = null;
        for (Map.Entry<String, Integer> entry : users.entrySet()) { // This line throws NPE, because 'users' is null
            if(entry.getValue() > maxAge) {
                oldestUser = entry.getKey();
                maxAge = entry.getValue();
            }
        }
        return oldestUser;
    }
}
@Configuration
@EnableConfigurationProperties(UserProperties.class)
public class UserConfiguration {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM