In Bezug auf die grundlegende Verwendung von Spring Cloud -Konfiguration wurde im vorherigen Blog erwähnt. Wenn Sie nicht verstehen, lesen Sie bitte zuerst den vorherigen Blog.
Spring Cloud Config integriert GitLab, um ein verteiltes Konfigurationszentrum zu erstellen
Hohe Verfügbarkeit von Feder Cloud Config Distorle Configuration Center
Wir konzentrieren sich heute darauf, wie Sie die heiße Bereitstellung von Datenquellen erreichen können.
1. Konfigurieren Sie die Datenquelle im Client
@RefreshScope @Configuration// Configure data source public class DataSourceConfigure { @Bean @RefreshScope// Refresh configuration file @ConfigurationProperties(prefix="spring.datasource") // Prefix for automatic configuration of data source public DataSource dataSource(){ return DataSourceBuilder.create().build(); }} Durch die oben genannten Schritte können Sie die Konfigurationsdatei auf GitLab ändern. Nach dem Auffrischen muss der Server nicht neu gestartet werden, und die neue Datenquelle wird wirksam.
2. Heißeinsatz von benutzerdefinierten Datenquellen
Wenn wir Spring Boot verwenden, um Druid zu integrieren, müssen wir die Datenquelle manuell konfigurieren. Der Code lautet wie folgt:
Paket com.chhliu.springcloud.config; importieren java.sql.sqlexception; importieren javax.sql.datasource; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.refrescope; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.context.annotation.primary; import com.alibaba.druid.pool.druiddatasource; import lombok.extern.slf4j.slf4j; / ** * * Beschreibung: Wenn die DataSource nicht manuell mit Code initialisiert wird, wird die SQL -Überwachung der Überwachungsschnittstelle keine Daten enthalten ("ist ein Spring -Boot -Fehler? @Value ("$ {spring.datasource.url}") private String dburl; @Value ("$ {spring.datasource.username}") privater String -Benutzername; @Value ("$ {Spring.DataSource.Password}") privates Zeichenfolge Passwort; @Value ("$ {Spring.DataSource.DriverClassName}") private String -Treiberklassename; @Value ("$ {spring.datasource.initialSize}") private init initialSize; @Value ("$ {spring.datasource.minidle}") Private int Minidle; @Value ("$ {spring.datasource.maxactive}") private int maxactive; @Value ("$ {spring.datasource.maxwait}") private int maxwait; @Value ("$ {Spring.DataSource.TimeBetweenevictionRunsmillis}") Private int timeBetweenevictionRunsmillis; @Value ("$ {Spring.DataSource.MineVictableIdletImemillis}") Private int mineVictableIdletImemillis; @Value ("$ {Spring.DataSource.ValidationQuery}") private String validationQuery; @Value ("$ {Spring.DataSource.TestIDEIDLE}") privater boolescher Test, während Idle; @Value ("$ {Spring.DataSource.TestonBorrow}") Private boolean testonborrow; @Value ("$ {spring.datasource.testonborrow}") Private boolean testonReturn; @Value ("$ {spring.datasource.testonborrow}") Private boolean PoolpreparedStatements; @Value ("$ {spring.datasource.maxpoolpoolpreparedStatementPerConnectionSize}") private int maxpoolProparedStatementPerconConnectionSize; @Value ("$ {spring.datasource.filters}") private String -Filter; @Value ("$ {Spring.DataSource.ConnectionProperties}") Private String ConnectionProperties; @Value ("$ {spring.datasource.useGlobaldataSourcestat}") private boolean useGlobaldatasourCestat; @Bean // Verwenden Sie es als Bean -Instanz @Primary // In derselben Datenquelle verwenden Sie zunächst die annotierte DataSource @refrescope public DataSource dataSource () {druidDataSource DataSource = new duiddataSource (); DataSource.seturl (this.dburl); DataSource.Setusername (Benutzername); DataSource.SetPassword (Passwort); DataSource.SetDriverClassName (TRAVERCLASSNAME); // configuration dataSource.setInitialSize (InitialSize); DataSource.SetMinidle (Minidle); DataSource.SetMaxActive (maxActive); DataSource.SetMaxwait (maxwait); DataSource.SettimeBetweenevictionRunsmillis (TimeBetweenevictionRunsmillis); DataSource.SetMineVictableIdletImemillis (minevictableIdletImemillis); DataSource.setValidationQuery (ValidationQuery); dataSource.settest -idle (test während der IDLE); DataSource.settestonborrow (testonborrow); DataSource.settestonReturn (testonReturn); DataSource.setPoolPreparedStatements (PoolpreparedStatements); DataSource.setMaxPoolProparedStatementPerConnectionSize (maxpoolPreparedStatementPerConnectionSize); DataSource.SetuseGlobaldatasourCestat (UseGlobaldatasourCestat); try {dataSource.setFilters (Filter); } catch (sqlexception e) {log.Error ("Druid -Konfigurationsinitialisierungsfilter:"+ e); } dataSource.setConnectionProperties (ConnectionProperties); DataSource zurückgeben; }} Im obigen Beispiel kann auch dynamische Aktualisierung von Datenquellen erreicht werden. Schauen wir uns anschließend an, wie die Frühlings -Cloud -Konfiguration die heiße Bereitstellung von Datenquellen implementiert.
Aus dem vorherigen Blog ist es nicht schwierig zu ermitteln, dass der entscheidende Punkt auf Anfrage der Post -Aktualisierung dynamische Aktualisierung ist, damit wir die Konfigurationsdatei aufbauen.
Wenn wir eine Aktualisierungsanforderung veröffentlichen, wird die Anfrage vom Aktuatormodul abgefangen. Dies ist aus der Startprotokolldatei zu sehen
Die Codekopie lautet wie folgt:
Zugeordnet "{[ /refresh || /Refresh.json weibliche, Methode=.. -post]}" auf public Java.lang.object org.springFramework.cloud.endpoint.genericPostablemVcendpoint.invoke ())
Schauen wir uns als nächstes den vom Aktuator definierten Endpunkt an, und dann finden wir die Refreshendpoint -Klasse. Der Quellcode dieser Klasse lautet wie folgt:
@ConfigurationProperties (Präfix = "Endpoints.refresh", IgnoreUnNOnnownfields = False) @ManagedResource Public Class Refreshendpoint erweitert AbstractendPoint <collection <string >> {private contreFresher contexTrefresher; public refreshendpoint (contextrrefresher contextrrefresher) {super ("refresh"); this.contextreFresher = contextrrefresher; } @Managedoperation public String [] refresh () {set <string> keys = contextreFresher.refresh (); return keys.toarray (neue String [keys.size ()]); } @Override public collection <string> invoke () {return arrays.aslist (reAtedsresh ()); }}Aus dem obigen Quellcode können wir feststellen, dass der Fokus auf der Contextrrefresher -Klasse liegt. Da diese Klasse zu lang ist, ist Folgendes ein teilweise Quellcode dieser Klasse:
privater Refreshscope -Bereich; public contexTreFresher (configurableApplicationContext -Kontext, RefreshScope Scope) {this.context = context; this.scope = Scope; } public synchronisierte set <string> refresh () {map <string, Objekt> vor = extrahieren (this.context.getEvironment (). extract (this.context.getenvironment (). getPropertySources ()). Keyset (); // 3. Ersetzen Sie den Wert in der ursprünglichen Umgebungsvariable this.context.publishEvent (new EnvironmentChangeEvent (Schlüssel); // 4. Rückgabeschlüssel; } Aus dem obigen Code ist es nicht schwer zu erkennen, dass die Schlüsselpunkte 4 Schritte durchlaufen und im obigen Code gekennzeichnet wurden.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.