스프링 클라우드 구성의 기본 사용과 관련하여 이전 블로그에서 언급되었습니다. 이해하지 못하면 먼저 이전 블로그를 읽으십시오.
Spring Cloud Config는 gitlab을 통합하여 분산 구성 센터를 구축합니다.
스프링 클라우드 구성 분산 구성 센터의 고 가용성
오늘날 우리는 데이터 소스를 뜨거운 배포하는 방법에 중점을 둡니다.
1. 클라이언트의 데이터 소스를 구성합니다
@RefreshScope @configuration // 데이터 소스 구성 공개 클래스 DataSourceConfigure {@bean @frefreshscope // 새로 고침 구성 파일 @configurationProperties (prefix = "spring.datasource") // 데이터 소스 DataSource의 데이터 소스를위한 prefix () {Refort DatasourceBuilder.create (). }} 위의 단계를 통해 gitlab에서 구성 파일을 수정할 수 있습니다. 새로 고침 후 서버를 다시 시작할 필요가 없으며 새 데이터 소스가 적용됩니다.
2. 사용자 정의 데이터 소스의 핫 배포
Spring Boot를 사용하여 Druid를 통합 할 때 데이터 소스를 수동으로 구성해야합니다. 코드는 다음과 같습니다.
패키지 com.chhliu.springcloud.config; java.sql.sqlexception 가져 오기; javax.sql.datasource import; org.springframework.beans.factory.annotation.value import; org.springframework.cloud.context.config.annotation.refreshscope; import org.springframework.context.annotation.bean; org.springframework.context.annotation.configuration; import org.springframework.context.annotation.primary; import com.alibaba.druid.pool.druiddatasource; 가져 오기 lombok.extern.slf4j.slf4j; / ** * * 설명 : 데이터 소스가 코드를 사용하여 수동으로 초기화되지 않은 경우 모니터링 인터페이스의 SQL 모니터링에는 데이터가 없습니다 ( "스프링 부츠 버그? @Value ( "$ {spring.datasource.url}") 개인 문자열 dburl; @Value ( "$ {spring.datasource.username}") 개인 문자열 사용자 이름; @Value ( "$ {spring.datasource.password}") 개인 문자열 비밀번호; @Value ( "$ {spring.datasource.driverClassName}") 개인 문자열 driver className; @Value ( "$ {spring.datasource.initialSize}") 개인 int 이니셜 크기; @Value ( "$ {spring.datasource.minidle}") 개인 int minidle; @Value ( "$ {spring.datasource.maxactive}") private int maxactive; @Value ( "$ {spring.datasource.maxwait}") 개인 int maxwait; @Value ( "$ {spring.datasource.timebetweenevictionRunsmillis}") private int timebetweenevictionRunsmillis; @Value ( "$ {spring.datasource.mineVictableDletimemillis}") private int minevictableDletimemillis; @Value ( "$ {spring.datasource.validationQuery}") private String validationQuery; @Value ( "$ {spring.datasource.testsThileIdle}") 개인 부울 테스트 WhileIdle; @Value ( "$ {spring.datasource.testonborrow}") 개인 부울 testonborrow; @Value ( "$ {spring.datasource.testonborring}") 개인 부울 testonreturn; @Value ( "$ {spring.datasource.testonborrow}") 개인 부울 풀 프리 퍼드 스테이트; @Value ( "$ {spring.datasource.MaxPoolPrepRedStatementPerConnectionsize}") private int maxpoolprepedStatementPerConnectionsize; @Value ( "$ {spring.datasource.filters}") 개인 문자열 필터; @Value ( "$ {spring.datasource.connectionProperties}") private String ConnectionProperties; @Value ( "$ {spring.datasource.useglobaldatasourcestat}") Private Boolean useglobaldatasourcestat; @Bean // 동일한 데이터 소스에서 Bean 인스턴스로 선언합니다. 먼저 주석이 달린 DataSource @RefreshScope Public DataSource DataSource () {druiddatasource DataSource = New Druiddatasource ()를 사용하십시오. DataSource.seturl (this.dburl); DataSource.setusername (사용자 이름); DataSource.setpassword (비밀번호); DataSource.setDriverClassName (DriverClassName); // configuration dataSource.setInitialSize (이니셜 크기); DataSource.setminidle (Minidle); DataSource.setMaxActive (maxactive); DataSource.setmaxwait (Maxwait); DataSource.settimebetweenevictionRunsmillis (TimeBetweenevictionRunsmillis); DataSource.SetMineVictableIdleTimemillis (MineVictableDletimemillis); DataSource.setValidationQuery (ValidationQuery); DataSource.SetTestWhileIdle (테스트 whileIdle); DataSource.SetTestOnborrow (TestOnBorrow); DataSource.SetTestOnreturn (TreastonReturn); DataSource.setPoolpreparedStatements (poolpreparedStatements); DataSource.setMaxPoolPreparedStatementPerConnectionsize (maxpoolpreparedStatemperConnectionsize); DataSource.setuseGlobaldatasourcestat (useglobaldatasourcestat); try {dataSource.setFilters (필터); } catch (sqlexception e) {log.error ( "druid 구성 초기화 필터 :"+ e); } dataSource.setConnectionProperties (ConnectionProperties); 반환 데이터 소스; }} 위의 예를 통해 데이터 소스의 동적 새로 고침도 달성 할 수 있습니다. 다음으로 Spring Cloud Config가 데이터 소스의 핫 배포를 구현하는 방법을 살펴 보겠습니다.
이전 블로그에서 동적 새로 고침을 달성하기 위해 핵심 요점은 Post Refresh의 요청에있어서 구성 파일을 새로 고침하여 시작한다는 것을 찾기가 어렵지 않습니다.
새로 고침 요청을 게시하면 Actuator 모듈에 의해 요청이 가로 채게됩니다. 시작 로그 파일에서 볼 수 있습니다
코드 사본은 다음과 같습니다.
"{[ /refresh || /refresh.json] java.lang.object org.springframework.cloud.endpoint.genericpostablemvcendpoint.invoke ()
다음으로 액추에이터로 정의 된 엔드 포인트를 살펴본 다음 CompertendPoint 클래스를 찾습니다. 이 클래스의 소스 코드는 다음과 같습니다.
@ConfigurationProperties (prefix = "endpoints.refresh", ingoreUlkNownFields = false) @ManageResource public class refreshendpoint 확장 Abstractendpoint <collection <string>> {private contextrephersher contextresher; Public RomformendPoint (ConteXtresher ContexTrefresher) {Super ( "Refresh"); this.contextrefresher = contextrefresher; } @ManageDoperation public String [] refresh () {set <string> keys = contextrefresher.refresh (); return keys.toArray (새 문자열 [keys.size ()]; } @override public collection <string> invoke () {return arrays.aslist (refresh ()); }}위의 소스 코드에서 우리는 ContexTrefresher 클래스에 중점을두고 있음을 알 수 있습니다. 이 클래스는 너무 길기 때문에 다음은이 클래스의 부분 소스 코드입니다.
Private RefreshScope 범위; public contextrefresher (configurableApplicationContext Context, CompertSCope Scope) {this.context = context; this.scope = 범위; } public synchronized set <string> refresh () {map <string, object> prever = extract = extract (this.context.getenvironment ()); getPropertySources ()); // 1. 이전에 구성 파일을로드 및 추출 파일 AddConFigFiGfileStoEnvernment (); extract (this.context.getenvironment (). getPropertySources ())). keyset (); // 3. 원래 환경 변수의 값을 대체 th리 리턴 키; } 위의 코드에서 핵심 포인트가 4 단계를 거쳐 위의 코드에 표시되어 있음을 확인하는 것은 어렵지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.