2017-07-17 6 views
1

Ich folge dem hier beschriebenen Ansatz: https://github.com/jeroenbellen/blog-manage-and-reload-spring-properties, der einzige Unterschied ist, dass in meinem Fall die Eigenschaften in mehreren Klassen verwendet werden, so habe ich sie alle in einer Dienstklasse CloudConfig und ich beziehen sich auf seine Variablen mit den Gettern. Das ist, was die Klasse wie folgt aussieht:@RefreshScope funktioniert nicht - Spring Boot

@Configuration 
@RefreshScope 
public class CloudConfig { 

    static volatile int count; // 20 sec 

    @Value("${config.count}") 
    public void setCount(int count) { 
     this.count = count; 
    } 

    public static int getCount() { 
     return count; 
    } 

} 

und ich verwende die Variable count in anderen Klassen wie CloudConfig.getCount(). Ich bin in der Lage, die Eigenschaften beim Booten gut zu laden, aber ich bin nicht in der Lage, sie dynamisch im laufenden Betrieb zu aktualisieren. Kann mir jemand sagen, was ich falsch mache? Wenn ich diese Konfig-Klasse nicht mache, mache ich genau das, was das Tutorial beschreibt, alles funktioniert gut, aber ich habe Probleme, es an meinen Anwendungsfall anzupassen. Kann jemand sagen, was ich vermisse?

+0

Wenn die anderen Klassen Singletons sind und diese Werte nur beim Start laden, erhalten sie nach einer Aktualisierung keine neuen Werte. –

+0

Ja, aber die in CloudConfig wird, und ich werde Getter (CloudConfig.getCount()) in anderen Klassen verwenden, damit sie auch die richtigen Werte erhalten. Richtig? – ion20

+0

Wenn Sie die Getter nur verwenden, um die Werte einmal festzulegen, dann werden sie nicht statisch sein, aber normale Methoden, sonst wird die Proxy-Erstellung fehlschlagen. –

Antwort

3

Verwenden Sie stattdessen @ConfigurationProperties. z.B.

@ConfigurationProperties(prefix="config") 
public class CloudConfig { 

    private Integer count; 

    public Integer count() { 
     return this.count; 
    } 

    public void setCount(Integer count) { 
     this.count = count; 
    } 

} 

Die reference doc from spring cloud Staaten:

@RefreshScope Werke (technisch) auf einer @Configuration Klasse, aber es könnte überraschendes Verhalten führen: z Es bedeutet nicht, dass alle in dieser Klasse definierten @Beans @RefreshScope sind. Insbesondere kann alles, was von diesen Beans abhängig ist, nicht darauf angewiesen sein, dass sie aktualisiert werden, wenn eine Aktualisierung initiiert wird, es sei denn, sie befindet sich in @RefreshScope (in dem es bei einer Aktualisierung neu erstellt wird und dessen Abhängigkeiten neu injiziert werden Punkt werden sie aus der aktualisierten @ Konfiguration neu initialisiert werden.

Verwandte Themen