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