2017-02-17 14 views
0

我使用Spring的@PropertySource@ConfigurationProperties來讀取文件中的屬性。下面是樣本性質:Spring引導:覆蓋屬性值讀取器

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,然後將其添加到模式列表中。例如。新的名單將

​​

所以,我需要重寫東西這將調用Pattern.compile對字符串屬性,並返回然後會被添加到列表Pattern對象。可能嗎?

+0

恕我直言,你不需要重寫它(也許還應該),你可以把它定義爲字符串,然後在吸氣計算它.. – Jaiwo99

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

} 
+0

這意味着我需要讀取字符串中的整個列表,然後再次遍歷它(至少一次)。當屬性被添加到列表中時,我們可以以某種方式執行此轉換嗎? –

+0

雖然沒有達到完全相同的效果嗎? – PaulNUK

+0

你可以給答案添加一個例子嗎? –