在Spring Boot中访问多个属性和动态分配的最佳方法

时间:2019-04-09 16:24:33

标签: java spring spring-boot

在Spring中为每个类别表示以下属性的最佳方法是什么?目前,我们已经为aaa属性实现了。对于每个类别,我们总是有两个字段。

我们要对所有类别使用相同的POJO。请提出适合的最佳方法。

属性文件名 package.properties

category.aaa.field1 = value1
category.aaa.field2 = value2

category.bbb.field1 = value1
category.bbb.field2 = value2

category.ccc.field1 = value1
category.ccc.field2 = value2

category.ddd.field1 = value1
category.ddd.field2 = value2

我们用

创建了一个POJO。
@Data    
public class CategoryPojo{
    private String valueOne;
    private String valueTwo;

}

我们正在使用@PropertySource在@Configuration中读取它

@Configuration
@ComponentScan(value = "com.category")
@PropertySource("classpath:package.properties")
public class CategoryConfig{
    @Value("${category.aaa.field1}")
    private String fieldOne;

    @Value("${category.aaa.field2}")
    private String fieldTwo;

    @Bean(name = "getACategory")
    public CategoryPojo getFields() {
        return new CategoryPojo(fieldOne, fieldTwo);
    }

}

1 个答案:

答案 0 :(得分:1)

您可以并且应该使用https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties

要解决这个问题。

@Data
@ConfigurationProperties(prefix="category")
public class MyProperties{

private CategoryPojo aaa;
private CategoryPojo bbb;
private CategoryPojo ccc;
private CategoryPojo ddd;


@Data    
public static class CategoryPojo{
    private String valueOne;
    private String valueTwo;

}


}

然后可以将@EnableConfigurationProperties(classes = MyProperties.class)放在您的主应用程序类或其他@Configuration上,然后在需要的地方@Autowire放置MyProperties类。