Spring boot: переопределить значение свойства

Я использую Spring's @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 ответ

Создайте метод в этой конфигурации, который возвращает список шаблонов, аннотируйте его с помощью @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;
  }

}
Другие вопросы по тегам