Tengo la siguiente enumeración:
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;
}
}
Quiero fijar la variable diferente someNumber para ambas instancias de la enumeración utilizando el archivo application.properties. ¿Es esto posible y si no, ¿debería dividir en dos clases usando una clase / interfaz abstracta a la producción?
No se puede / no debe cambiar los valores de una enumeración en Java. Trate de usar una clase en su lugar:
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
}
De crear una costumbre 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
}
Ahora puede cambiar los valores de my.config.name.someNumber
y my.config.fame.someNumber
en el archivo application.properties. Si quiere desactivar el cambio de minúsculas / atitude hacerlos final.
Antes de poder usarlo hay que anotar una @Configuration
clase con @EnableConfigurationProperties(MyConfigConfigurationProperties.class)
. También añadir el org.springframework.boot:spring-boot-configuration-processor
como una dependencia opcional para una mejor IDE de apoyo.
Si desea acceder a los valores:
@Autowired
MyConfigConfigurationProperties config;
...
config.getName().getSumeNumber();