SpringCloud配置中心config


1,配置中心可以用zookeeper來實現,也可以用apllo 來實現,springcloud 也自帶了配置中心config

Apollo 實現分布式配置中心

zookeeper:實現分布式配置中心,主要是通過持久節點存儲配置信息加上事件通知

Apollo:實現分布式配置中心,主要是通過mysql 數據庫存儲配置信息,通過有圖形界面可以管理配置文件信息

srpingcloud config: 實現分布式配置中心,主要是通過版本控制器(git/svn)存儲配置文件信息,沒有后台

2,搭建springcloud-config 分布式配置中心

 

      1,搭建碼雲(git),開源的git 服務器,創建賬號,創建倉庫,創建文件 

            https://gitee.com/aiyuesheng/springcloud-config/blob/master/config/config-client-dev.properties

            這個放在git 上的配置文件信息,有參數age=10333

            配置文件名:config-client-dev.properties

            配置文件名稱規范:服務名-環境.properteis   例如開發環境是:config-client-dev.properties,生產環境:config-client-prd.properties

3,  搭建eureka 注冊中心,這個之前已經寫過,需要將springcloud-config 以及 配置中心的客戶端注冊上去

     最后就是以下三個服務都起來,然后springcloud-config-client 通過springcloud-server 讀取git 上的配置文件

4,搭建springcloud-config(配置中心)

     maven依賴:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <!-- 管理依賴 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!--spring-cloud 整合 config-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!-- SpringBoot整合eureka客戶端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

    </dependencies>
    <!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
View Code

     application.yml: springcloud-config(配置中心) 這個服務注冊到eureka 上的別名:config-server, git環境地址,以及文件夾搜索配置文件信息都有

###服務注冊到eureka地址
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka
spring:
  application:
    ####注冊中心應用名稱
    name: config-server
  cloud:
    config:
      server:
        git:
          ###git環境地址 倉庫
          uri: https://gitee.com/aiyuesheng/springcloud-config.git
          ####搜索目錄
          search-paths:
            - config  
      ####讀取分支      
      label: master
####端口號      
server:
  port: 8888

啟動類:

@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication
public class ConfigApp {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApp.class, args);
    }
}

5,搭建springcloud-client 端,也就是正常的服務,需要從配置中心上面讀取配置文件信息

maven:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <!-- 管理依賴 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- SpringBoot整合Web組件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!-- SpringBoot整合eureka客戶端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- actuator監控中心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
View Code

配置文件信息:name:應用名稱,如果git 上沒有這個應用開頭的名字,會找不到,profile:dev:git 上配置文件的環境名,service-id:config-server, 是配置中心服務器注冊到eureka 上的別名

spring:
  application:
    ####注冊中心應用名稱
  name: config-client
  cloud:
    config:
    ####讀取后綴
 profile: dev
      ####讀取config-server注冊地址
      discovery:
    service-id: config-server
        enabled: true
#####eureka服務注冊地址    
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka    
server:
  port: 8882
 
#配置手動實時刷新 
#managementendpoints.web.exposure.include=*
management:
  endpoints:
    web:
      exposure:
        include: "*"

測試類:

@Component
@Data
@RefreshScope
public class Parameter {
    
    @Value("${age}")
    private String age;

}

 

@RestController
public class IndexService {

    @Autowired
    private Parameter parameter;
    
    @RequestMapping("/getAge")
    private String getAge() {
        System.out.println(parameter.getAge());
        return parameter.getAge();
    }

}

啟動類:

@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApp {
    
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApp.class, args);
    }

    
}

測試完,可以讀取數據

 

5,刷新數據----手動刷新

如果git 上配置文件信息修改了,本地緩存的配置文件信息是不會立即刷新的。在上面的例子中,我將讀取的參數、,放入到了一個單獨的Parameter 中,加上了注解@RefreshScope,同時,需要客戶端需要加上actuator 監控中心

        <!-- actuator監控中心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

同時,配置文件增加嗎,每個接口都實時監控:

#配置手動實時刷新 
#managementendpoints.web.exposure.include=*
management:
  endpoints:
    web:
      exposure:
        include: "*"

每次修改完畢,需要手動發送post 請求,我是在post man 上發送

http://127.0.0.1:8882/actuator/refresh

如果有更新,會有提示,沒有,則返回【】

再次刷新,配置文件信息,就刷新了

 

本來,我是將@RefreshScope 放入到了控制層的類上,但是就是讀取為null ,很坑。。。。。。

 

實時刷新采用SpringCloud Bus消息總線,可以實時刷新,但是影響性能。。。

 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM