2017-02-17 16 views
0

Ich verwende Spring @PropertySource und @ConfigurationProperties, um die Eigenschaften aus einer Datei zu lesen. Im Folgenden sind die Probeneigenschaften:Spring Boot: überschreiben Eigenschaft Wert Leser

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

Unterhalb der Klasse ist, die diese Eigenschaften lautet:

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

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

Diese Eigenschaften liest wie erwartet, und die Werte in patterns Liste setzt. Was ich aber wirklich machen möchte, ist, die pattern zu kompilieren, bevor sie hinzugefügt wird, und sie dann in die Liste der Patterns einzufügen. Z.B. Die neue Liste wird

private List<Pattern> patterns; 

Also, ich etwas außer Kraft setzen müssen, die Pattern.compile auf String-Eigenschaft nennen würde und Pattern-Objekt zurück, das dann in die Liste hinzugefügt würde. Ist es möglich?

+0

IMHO Sie es nicht außer Kraft setzen müssen (vielleicht sollte auch nicht), können Sie es einfach als String definieren, und es in Getter berechnen .. – Jaiwo99

+0

Haben Sie versucht, es ... –

Antwort

0

Erstellen Sie eine Methode in dieser Konfiguration, die die Liste der Muster zurückgibt, mit @Bean annotiert und das Muster innerhalb der Methode kompiliert.

@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

Dies würde bedeuten, Ich muss die gesamte Liste in einer Zeichenfolge lesen und sie dann konvertieren, indem ich sie (zumindest einmal) erneut durchführe. Können wir diese Konvertierung irgendwie durchführen, wenn Eigenschaften in die Liste aufgenommen werden? –

+0

Wird das nicht genau dasselbe erreichen? – PaulNUK

+0

Könnten Sie der Antwort ein Beispiel hinzufügen? –

Verwandte Themen