可以使用@ConfigurationProperties注解和@Value注解来实现在Spring Boot配置文件中注入Map,value为自定义复杂对象。

  1. 使用@ConfigurationProperties注解

在配置文件中添加配置项,例如:

myapp.users[0].name=Tom
myapp.users[0].age=18
myapp.users[0].address.city=Beijing
myapp.users[0].address.street=Haidian
myapp.users[1].name=Jerry
myapp.users[1].age=20
myapp.users[1].address.city=Shanghai
myapp.users[1].address.street=Pudong

在Java类中使用@ConfigurationProperties注解将配置项注入至Map中:

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {
    private Map<String, User> users = new HashMap<>();

    public Map<String, User> getUsers() {
        return users;
    }

    public void setUsers(Map<String, User> users) {
        this.users = users;
    }
}

其中User为自定义复杂对象,包含name、age和address属性。

  1. 使用@Value注解

在配置文件中添加配置项,例如:

myapp.users=Tom:18:Beijing:Haidian,Jerry:20:Shanghai:Pudong

在Java类中使用@Value注解将配置项注入至Map中:

@Component
public class MyAppConfig {
    private Map<String, User> users = new HashMap<>();

    @Value("#{T(java.util.Arrays).stream('${myapp.users}').map(s -> s.split(':')).collect(T(java.util.stream.Collectors).toMap(a -> a[0], a -> new User(a[0], Integer.parseInt(a[1]), new Address(a[2], a[3]))))}")
    public void setUsers(Map<String, User> users) {
        this.users = users;
    }

    public Map<String, User> getUsers() {
        return users;
    }
}

其中User和Address为自定义复杂对象,通过@Value注解解析配置项,创建Map对象

springboot配置文件注入Mapvalue为自定义复杂对象

原文地址: https://www.cveoy.top/t/topic/fFmU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录