Как предварительно обработать значения из файла конфигурации spring?

У меня есть параметр конфигурации » myconfig.defaultSize», значение которого в приложении определено, например, как «10MB».файл свойств.

С другой стороны, у меня есть класс @Component с аннотацией @ConfigurationProperties, отображающей эти параметры конфигурации, следующим образом.

@Component
@ConfigurationProperties(prefix="myconfig")
public class StorageServiceProperties {
   private Long defaultSize;
   //...getters and setters
}

Итак, как я могу применить метод для преобразования строкового значения в Long?

2 ответа

  1. public void setDefaultSize(String defaultSize) {
      try {
        this.defaultSize = Long.valueOf(defaultSize);
      } catch (NumberFormatException e) {
        // handle the exception however you like
      }
    }
    
  2. Такой универсальный преобразователь нельзя применять на основе свойств. Вы можете зарегистрировать преобразователь из String в Long, но он будет вызываться для каждого такого случая (любое свойство типа Long в основном).

    Цель @ConfigurationPropertiesзаключается в сопоставлении Environmentс более высокого уровня структуры данных. Возможно, вы могли бы сделать это там?

    @ConfigurationProperties(prefix="myconfig")
    public class StorageServiceProperties {
        private String defaultSize;
        // getters and setters
    
        public Long determineDefaultSizeInBytes() {
            // parsing logic
        }
    
    }
    

    Если вы посмотрите на составную поддержку в Spring Boot, мы сохраняем строковое значение и используем @ConfigurationPropertiesобъект для созданияMultipartConfigElement, который отвечает за синтаксический анализ. Таким образом, можно указать эти специальные значения в коде и конфигурации.