เกี่ยวกับการใช้งานขั้นพื้นฐานของ Spring Cloud Config มันถูกกล่าวถึงในบล็อกก่อนหน้า หากคุณไม่เข้าใจโปรดอ่านบล็อกก่อนหน้าก่อน
Spring Cloud Config รวม Gitlab เพื่อสร้างศูนย์การกำหนดค่าแบบกระจาย
ความพร้อมใช้งานสูงของศูนย์การกำหนดค่าแบบกระจายสปริงคลาวด์
วันนี้เรามุ่งเน้นไปที่วิธีการปรับใช้แหล่งข้อมูลที่ร้อนแรง
1. กำหนดค่าแหล่งข้อมูลบนไคลเอนต์
@ReFreshScope @การกำหนดค่า // กำหนดค่าแหล่งข้อมูลคลาสสาธารณะคลาส DataSourceConFigure {@Bean @RefreshScope // ไฟล์การกำหนดค่ารีเฟรช @ConfigurationProperties (คำนำหน้า = "Spring.Datasource") // คำนำหน้าสำหรับการกำหนดค่าอัตโนมัติ - ผ่านขั้นตอนข้างต้นคุณสามารถแก้ไขไฟล์การกำหนดค่าบน Gitlab หลังจากรีเฟรชเซิร์ฟเวอร์ไม่จำเป็นต้องรีสตาร์ทและแหล่งข้อมูลใหม่จะมีผล
2. การปรับใช้แหล่งข้อมูลที่กำหนดเองร้อนแรง
เมื่อเราใช้ Spring Boot เพื่อรวม DRUID เราจำเป็นต้องกำหนดค่าแหล่งข้อมูลด้วยตนเองรหัสมีดังนี้:
แพ็คเกจ com.chhliu.springcloud.config; นำเข้า java.sql.sqlexception; นำเข้า Javax.sql.Datasource; นำเข้า org.springframework.beans.factory.annotation.value; นำเข้า org.springframework.cloud.context.config.annotation.refreshscope; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.context.annotation.configuration; นำเข้า org.springframework.context.annotation.primary; นำเข้า com.alibaba.druid.pool.druiddatasource; นำเข้า lombok.extern.slf4j.slf4j; / ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @Value ("$ {Spring.datasource.url}") สตริงส่วนตัว dburl; @Value ("$ {Spring.datasource.username}") ชื่อผู้ใช้สตริงส่วนตัว; @Value ("$ {Spring.Datasource.Password}") รหัสผ่านสตริงส่วนตัว; @Value ("$ {Spring.Datasource.DriverClassName}") สตริงส่วนตัว DriverClassName; @Value ("$ {Spring.Datasource.InitialSize}") ค่าเริ่มต้น INT ส่วนตัว; @Value ("$ {Spring.datasource.minidle}") private int minidle; @Value ("$ {Spring.datasource.maxactive}") int maxactive ส่วนตัว; @Value ("$ {Spring.datasource.maxwait}") int maxwait ส่วนตัว; @Value ("$ {Spring.datasource.timeBetweenevictionRunsmillis}") INt TimebetweeneVictionRunsmillis ส่วนตัว; @Value ("$ {Spring.datasource.MinevictableidletItimeMillis}") int private int minevictableidletimeMillis ส่วนตัว; @Value ("$ {Spring.Datasource.ValidationQuery}") Private String ValidationQuery; @Value ("$ {Spring.datasource.testhialidle}") บูลีนส่วนตัวทดสอบในขณะเดียวกัน; @Value ("$ {Spring.datasource.testonborrow}") Boolean Private Boolean Testonborrow; @Value ("$ {Spring.datasource.testonborrow}") บูลีนส่วนตัว testonreturn; @Value ("$ {Spring.datasource.testonborrow}") บูลีนส่วนตัว poolean poolpreparedstatements; @Value ("$ {Spring.Datasource.MaxPoolPreparedStatementPerConnesionesize}") int maxpoolpreparedStatementPerconnectionize ส่วนตัว @Value ("$ {Spring.Datasource.Filters}") ตัวกรองสตริงส่วนตัว; @Value ("$ {Spring.Datasource.ConnectionProperties}") สตริงการเชื่อมต่อส่วนตัว @Value ("$ {Spring.datasource.useglobaldataSourcestat}") บูลีนส่วนตัวใช้ Globaldatasourcestat; @Bean // ประกาศว่าเป็นอินสแตนซ์ถั่ว @Primary // ในแหล่งข้อมูลเดียวกันก่อนอื่นให้ใช้ DataSource @RefreshScope DataSource DataSource () {dataSource DataSource = new druidDataSource (); dataSource.seturl (this.dburl); DataSource.SetUserName (ชื่อผู้ใช้); DataSource.SetPassword (รหัสผ่าน); DataSource.SetDriverClassName (DriverClassName); // dataSource.SetInitialSize (ค่าเริ่มต้น); DataSource.setMinidle (minidle); DataSource.SetMaxactive (maxactive); DataSource.setMaxWait (MaxWait); DataSource.SettimeBetweenevictionRunsmillis (TimebetweenevictionRunsmillis); DataSource.SetMineVictableIdletImeMillis (minevictableidletimeMillis); DataSource.SetValidationQuery (ValidationQuery); dataSource.settesthavyidle (testharhialidle); DataSource.SettestonBorrow (TestonBorrow); DataSource.SettestonReturn (TestOnReturn); DataSource.SetPoolPreparedStatements (PoolPreparedStatements); DataSource.SetMaxPoolPreparedStatementPerConnectionize (MaxPoolPreparedStatementPerConnectionize); DataSource.SetUsEglobalDatasourCestat (USEGLOBALDATASOURCESTAT); ลอง {dataSource.setFilters (ตัวกรอง); } catch (sqlexception e) {log.error ("ตัวกรองการเริ่มต้นการกำหนดค่า DRUID:"+ e); } dataSource.SetConnectionProperties (ConnectionProperties); ส่งคืนแหล่งข้อมูล; - ผ่านตัวอย่างข้างต้นการรีเฟรชแบบไดนามิกของแหล่งข้อมูลสามารถทำได้ จากนั้นมาดูกันว่า Spring Cloud Config ใช้การปรับใช้แหล่งข้อมูลอย่างร้อนแรงอย่างไร
จากบล็อกก่อนหน้านี้ไม่ยากที่จะพบว่าเพื่อให้ได้การรีเฟรชแบบไดนามิกจุดสำคัญคือการร้องขอการรีเฟรชโพสต์ดังนั้นเราจึงเริ่มต้นด้วยการรีเฟรชไฟล์การกำหนดค่า
เมื่อเราโพสต์คำขอรีเฟรชคำขอจะถูกสกัดกั้นโดยโมดูลแอคทูเอเตอร์ สามารถเห็นได้จากไฟล์บันทึกเริ่มต้น
การคัดลอกรหัสมีดังนี้:
แม็พ "{[ /รีเฟรช || /refresh.json เหมือนกัน, methods= [โพสต์โพสต์]}" ไปยังสาธารณะ java.lang.Object org.springframework.cloud.endpoint.genericpostablemvence.invoke ()
ต่อไปมาดูจุดสิ้นสุดที่กำหนดโดยแอคทูเอเตอร์แล้วเราจะพบคลาส Refreshendpoint ซอร์สโค้ดของคลาสนี้มีดังนี้:
@ConfigurationProperties (คำนำหน้า = "endpoints.Refresh", เพิกเฉยต่อ useNoreUnkNownFields = false) @ManagedResource การทบทวนคลาสสาธารณะจะขยายบทคัดย่อ abstractEndpoint <collection <string>> {ส่วนตัว contextrefresher contextrefresher; Public Refreshendpoint (Contextrefresher Contextrefresher) {super ("Refresh"); this.contextrefresher = contextrefresher; } @ManagePeration สตริงสาธารณะ [] Refresh () {Set <String> keys = contextrefresher.refresh (); return keys.toArray (สตริงใหม่ [keys.size ()]); } @Override Public Collection <String> Invoke () {return array.aslist (Refresh ()); -จากซอร์สโค้ดด้านบนเราจะเห็นว่าโฟกัสอยู่ที่คลาส Contextrefresher เนื่องจากคลาสนี้ยาวเกินไปต่อไปนี้เป็นซอร์สโค้ดบางส่วนของคลาสนี้:
ขอบเขตการรีเฟรชส่วนตัว public contextrefresher (บริบท configurableapplicationContext, ขอบเขตการรีเฟรช SCOPE) {this.context = บริบท; this.scope = ขอบเขต; } Set Synchronized สาธารณะ <String> Refresh () {MAP <String, Object> ก่อน = Extract (this.context.getEnvironment (). getPropertySources ()); // 1. ก่อนหน้าโหลดและแยกไฟล์การกำหนดค่า addConfigFilestoEnvironment (); // 2 Extract (this.context.getenvironment (). getPropertySources ())). keyset (); // 3. แทนที่ค่าในตัวแปรสภาพแวดล้อมดั้งเดิม this.context.publisheVent (ใหม่สิ่งแวดล้อม กุญแจกลับ; - ไม่ยากที่จะเห็นจากรหัสด้านบนว่าประเด็นสำคัญได้ผ่านขั้นตอน 4 ขั้นตอนและถูกทำเครื่องหมายไว้ในรหัสข้างต้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น