Настройка перечисления в Spring с помощью application.properties - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующее перечисление:

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;
    }
}

Я хочу установить переменную someNumber, различную для обоих экземпляров перечисления, используя файл application.properties.Возможно ли это, и если нет, должен ли я разделить его на два класса, используя абстрактный класс / интерфейс для абстракции?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы не можете / не должны изменять значения перечисления в 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
}

Теперь вы можете изменять значения my.config.name.someNumber и my.config.fame.someNumberв файле application.properties.Если вы хотите запретить изменение строчных букв / символов, сделайте их окончательными.

Прежде чем вы сможете использовать его, вы должны аннотировать класс @Configuration с помощью @EnableConfigurationProperties(MyConfigConfigurationProperties.class).Также добавьте org.springframework.boot:spring-boot-configuration-processor в качестве необязательной зависимости для лучшей поддержки IDE.

Если вы хотите получить доступ к значениям:

@Autowired
MyConfigConfigurationProperties config;
...
config.getName().getSumeNumber();
0 голосов
/ 17 декабря 2018

Хорошо, вы можете сделать следующее:

  1. Создать новый класс: MyEnumProperties

    @ConfigurationProperties(prefix = "enumProperties")
    @Getter
    public class MyEnumProperties {
    
        private Map<String, Long> enumMapping;
    
    }
    
  2. Включите ConfigurationProperties для вашего SpringBootApplication / любого Spring Config через

    @EnableConfigurationProperties(value = MyEnumProperties.class)
    
  3. Теперь добавьте ваши номера в application.properties файл, например так:

    enumProperties.enumMapping.NAME=123
    enumProperties.enumMapping.FAME=456
    
  4. В вашем приложении код автоматически связывает ваши свойства так:

    @Autowired
    private MyEnumProperties properties;
    
  5. Теперь вот в одну сторону для получения идентификаторов:

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

Вы можете получить таким образом для каждого значения Enum значения, определенные в вашем application.properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...