我正在使用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
对象,然后将其添加到列表中。有可能吗?
答案 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;
}
}