使用application.properties

时间:2018-12-17 11:57:15

标签: java spring spring-boot enums

我有以下枚举:

public enum MyEnum {
    NAME("Name", "Good", 100),
    FAME("Fame", "Bad", 200);

    private String lowerCase;
    private String atitude;
    private long someNumber;

    MyEnum(String lowerCase, String atitude, long someNumber) {
        this.lowerCase = lowerCase;
        this.atitude = atitude;
        this.someNumber = someNumber;
    }
}

我想使用application.properties文件为枚举的两个实例设置不同的someNumber变量。 这是否可能,如果不能,我是否应该使用抽象类/接口将其分为两个类?

2 个答案:

答案 0 :(得分:2)

您不能/不应该在Java中更改枚举的值。尝试改用一个类:

public class MyCustomProperty { 
    // can't change this in application.properties
    private final String lowerCase;
    // can change this in application.properties
    private String atitude;
    private long someNumber;

    public MyCustomProperty (String lowerCase, String atitude, long someNumber) {
        this.lowerCase = lowerCase;
        this.atitude = atitude;
        this.someNumber = someNumber;
    }
    // getter and Setters
}

比创建自定义ConfigurationProperties

@ConfigurationProperties(prefix="my.config")
public class MyConfigConfigurationProperties {
    MyCustomProperty name = new MyCustomProperty("name", "good", 100);
    MyCustomProperty fame = new MyCustomProperty("fame", "good", 100);

    // getter and Setters

    // You can also embed the class MyCustomProperty here as a static class. 
    // For details/example look at the linked SpringBoot Documentation
}

现在,您可以在application.properties文件中更改my.config.name.someNumbermy.config.fame.someNumber的值。如果要禁止更改小写字母/高度,请将其定型。

在使用它之前,您必须使用 @Configuration 注释一个@EnableConfigurationProperties(MyConfigConfigurationProperties.class)类。另外,将org.springframework.boot:spring-boot-configuration-processor添加为可选依赖项,以获得更好的IDE支持。

如果要访问值:

@Autowired
MyConfigConfigurationProperties config;
...
config.getName().getSumeNumber();

答案 1 :(得分:1)

那么您可以做的是以下事情:

  1. 创建一个新类: MyEnumProperties

    @ConfigurationProperties(prefix = "enumProperties")
    @Getter
    public class MyEnumProperties {
    
        private Map<String, Long> enumMapping;
    
    }
    
  2. 通过

    为您的SpringBootApplication /任何Spring Config启用ConfigurationProperties
    @EnableConfigurationProperties(value = MyEnumProperties.class)
    
  3. 现在将您的号码添加到 application.properties 文件中,如下所示:

    enumProperties.enumMapping.NAME=123
    enumProperties.enumMapping.FAME=456
    
  4. 在您的应用程序代码中,自动连接属性,如下所示:

    @Autowired
    private MyEnumProperties properties;
    
  5. 现在这是一种获取ID的方法

    properties.getEnumMapping().get(MyEnum.NAME.name()); //should return 123
    

您可以通过这种方式为每个Enum值获取application.properties

中定义的值