Spring boot:覆盖属性值阅读器

时间:2017-02-17 11:43:26

标签: java spring spring-boot configurationproperty

我正在使用Spring的@PropertySource@ConfigurationProperties来读取文件中的属性。以下是样本属性:

patterns[0]=\b(test1)\b
patterns[1]=\b(test2)\b

以下是读取这些属性的类:

@Configuration
@PropertySource("classpath:patterns.properties")
@ConfigurationProperties
public class PatternConfig {

    private List<String> patterns;
    //Getters and Setters
}

这将按预期读取属性并设置patterns列表中的值。但是,我真正想做的是,在添加pattern之前编译它,然后将其添加到模式列表中。例如。新列表将是

private List<Pattern> patterns;

因此,我需要覆盖某些,它会在字符串属性上调用Pattern.compile并返回Pattern对象,然后将其添加到列表中。有可能吗?

1 个答案:

答案 0 :(得分:0)

在此配置中创建一个方法,该方法返回模式列表,使用@Bean注释它,并在方法中执行模式编译。

@SpringBootApplication
@EnableConfigurationProperties
@Import(PatternConfig.class)
public class DemoApplication {

  public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
  }
}


@Configuration
@PropertySource("classpath:patterns.properties")
@ConfigurationProperties
class PatternConfig {


  public void setPatterns(List<String> patterns) {
      this.patterns = patterns;
  }

  private List<String> patterns;

  public List<String> getPatterns() {
      return patterns;
  }

  @Bean
  public List<Pattern> compiledPatterns() {

      List<Pattern> compiledPatterns = new ArrayList<>();
      for (String pattern : patterns) {
        compiledPatterns.add(
                Pattern.compile(pattern));
      }
      return compiledPatterns;
  }

}