如何从spring配置文件中预处理值?

时间:2016-12-28 14:27:58

标签: java spring spring-boot configuration-files

我有一个配置参数“myconfig.defaultSize”,其值在application.properties文件中定义为例如“10MB”。

另一方面,我有一个@Component类,其中@ConfigurationProperties注释映射了这些配置参数,如下所示。

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

那么,我怎样才能应用一个方法将String值转换为Long?

2 个答案:

答案 0 :(得分:1)

您不能在属性到属性的基础上应用此类通用转换器。您可以将String中的转换器注册到Long,但是会为每个这样的情况调用它(基本上是Long类型的任何属性)。

@ConfigurationProperties的目的是将Environment映射到更高级别的数据结构。也许你可以那样做?

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

    public Long determineDefaultSizeInBytes() {
        // parsing logic
    }

}

如果你看一下Spring Boot中的multipart支持,我们keep the String value and we use the @ConfigurationProperties object创建一个负责解析的MultipartConfigElement。这样,您就可以在代码和配置中指定这些特殊值。

答案 1 :(得分:-1)

public void setDefaultSize(String defaultSize) {
  try {
    this.defaultSize = Long.valueOf(defaultSize);
  } catch (NumberFormatException e) {
    // handle the exception however you like
  }
}