2016-05-31 19 views
1

Dies kann eine dumme Frage sein, aber ist es möglich, eine Liste mit einer Datei "application.properties" im Spring Boot zu füllen. Hier ist ein einfaches Beispiel:Spring Boot - Liste/Sammlung aus Application.properties füllen?

public class SomeClass { 
    @Value("${hermes.api.excluded.jwt}") 
    private List<String> excludePatterns = new ArrayList<>(); 
    // getters/settings .... 
} 

application.properties

// Is something along these lines possible???? 
hermes.api.excluded.jwt[0]=/api/auth/ 
hermes.api.excluded.jwt[1]=/api/ss/ 

Ich weiß, ich könnte eine durch Komma getrennte Zeichenfolge explodieren, aber ich war einfach neugierig, ob es ist ein native Federverschluß Art und Weise, dies zu tun?

+0

Haben Sie versucht? Es scheint, dass das Ausprobieren dauert weniger Zeit als das Schreiben einer Frage :) – Nikem

+0

Ja, wenn es möglich ist, kenne ich nicht die geheime Syntax in der Eigenschaftendatei, meine Frage nur verwendet, was ich dachte, war offensichtlich, ich bekomme .... Verursacht von: org.springframework.beans.factory.BeanCreationException: Feld konnte nicht automatisch gestartet werden: private java.util.List com.cwssoft.reportout.filter.JwtFilter.excludePatterns; verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Der Platzhalter 'hermes.api.excluded.jwt' konnte nicht im Zeichenfolgenwert "$ {hermes.api.excluded.jwt}" aufgelöst werden. – csyperski

+3

Ich denke, es ist http://stackoverflow.com/questions/12576156/reading-a-list-from-properties-file-and-load-mit-spring-annotation-value – zapl

Antwort

6

Es stellt sich heraus, dass es funktioniert. Es scheint jedoch, dass Sie Konfigurationseigenschaften verwenden müssen, da der einfache Pfad @Value("${prop}") einen anderen Pfad unter der Haube zu verwenden scheint. (Es gibt einige Hinweise auf DataBinder in this secion. Nicht sicher, ob im Zusammenhang.)

application.properties

foo.bar[0]="a" 
foo.bar[1]="b" 
foo.bar[2]="c" 
foo.bar[3]="d" 

und in Code

@Component 
@ConfigurationProperties(prefix="foo") 
public static class Config { 
    private final List<String> bar = new ArrayList<String>(); 
    public List<String> getBar() { 
     return bar; 
    } 
} 

@Component 
public static class Test1 { 
    @Autowired public Test1(Config config) { 
     System.out.println("######## @ConfigProps " + config.bar); 
    } 
} 

Ergebnisse in

######## @ConfigProps ["a", "b", "c", "d"] 

Während

@Component 
public static class Test2 { 
    @Autowired public Test2(@Value("${foo.bar}") List<String> bar) { 
     System.out.println("######## @Value " + bar); 
    } 
} 

Ergebnisse in

java.lang.IllegalArgumentException: Could not resolve placeholder 'foo.bar' in string value "${foo.bar}" 
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(... 
    ... 
Verwandte Themen