IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud-28-Spring Cloud Config创建Config Server和客户端 -> 正文阅读

[Java知识库]SpringCloud-28-Spring Cloud Config创建Config Server和客户端

11.4 创建Config Server

  • 在基础工程spring-cloud-microservice 下,创建一个名为 microservice-cloud-config-server-8016的 maven 模块,并在其 pom.xml 中添加 Spring Cloud Config 客户端的依赖,配置内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-microservice</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>microservice-cloud-config-server-8016</artifactId>

    <dependencies>
        <!--Spring Boot Web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--devtools 开发工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--spring-boot test 测试只能在test包中测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--junit 测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 修改后立即生效,热部署 这个热部署重启得更快 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.8.RELEASE</version>
        </dependency>
        <!--日志-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <!-- Spring Boot 监控模块,完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--引入 Eureka Client 的依赖,将服务注册到 Eureka Server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>
        <!--配置中心服务器依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
            <version>3.1.4</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • 在 microservice-cloud-config-server-8016 类路径(/resources 目录)下,创建一个名为 application.yml 的配置文件,配置如下。
server:
  port: 8016
spring:
  application:
    name: microServiceCloudConfigServer  #微服务名称,对外暴漏的微服务名称,十分重要
  cloud:
    config:
      server:
        git:
          # Git 地址, git@gitee.com:spacename/springcloud-config.git
          # 码云(gitee)https地址 uri: https://gitee.com/spacename/springcloud-config.git  (github 站点访问较慢,因此这里我们使用 gitee)
          uri: git@gitee.com:spacename/springcloud-config.git
          #仓库名
          search-paths:
            - springcloud-config
          force-pull: true
          # 如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写
          username: giteeUserName
          password: giteePassword
        #仓库分支名
        default-label: master

#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
  client:
    fetch-registry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka/  #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
      defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #将服务注册到 Eureka Server 集群
  instance:
    instance-id: microservice-cloud-config-server-8016 #自定义服务名称描述信息
    prefer-ip-address: true           #显示访问路径的 ip 地址
    #zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了
ribbon:
  eager-load:
    enabled: true  #关闭懒加载
  # 指的是建立连接后从服务器读取到可用资源所用的时间
  ReadTimeout: 6000
  # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间
  ConnectTimeout: 6000
  MaxAutoRetriesNextServer: 1
  MaxAutoRetries: 1
# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
# zuul中包含actuator依赖
management:
  endpoints:
    web:
      exposure:
        include: health,info,hystrix.stream  #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号
        #include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥
  info:
    env:
      enabled: true   #启用配置里的info开头的变量

info:             #配置一些服务描述信息,监控信息页面显示,,可以判断服务是否正常
  app.name: microservice-cloud-config-server-8016
  company.name: cloud.zk.com
  auth: zk
  email: 123@qq.com
  build.aetifactId: @project.artifactId@
  build.version: @project.version@
  • 在 microservice-cloud-config-server-8016 的主启动类上,使用 @EnableConfigServer 注解开启 Spring Cloud Config 配置中心功能,代码如下。
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer  //开启 Spring Cloud Config 配置中心功能
public class MicroServiceCloudConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicroServiceCloudConfigServerApplication.class, args);
    }

}
  • 依次启动服务注册中心(集群)和 microservice-cloud-config-server-8016,使用浏览器访问“http://localhost:8016/master/application-test.yml”,结果如下图。
    在这里插入图片描述

  • Spring Cloud Config 规定了一套配置文件访问规则,如下表。

    访问规则示例
    /{application}/{profile}[/{label}]/config/dev/master
    /{application}-{profile}.{suffix}/config-dev.yml
    /{label}/{application}-{profile}.{suffix}/master/config-dev.yml
  • 访问规则内各参数说明如下。

    • {application}:应用名称,即上传到仓库的配置文件的名称,例如application。
    • {profile}:环境名,一个项目通常都有开发(dev)版本、测试(test)环境版本、生产(prod)环境版本,配置文件则以 application-{profile}.yml 的形式进行区分,例如 application-dev.yml、application-test.yml、application-prod.yml 等。

    所以我们提交的配置文件可以是application-dev.yml、application-test.yml、application-prod.yml 多环境配置文件形式,也可以是多环境单配置文件形式

    • {label}:Git 分支名,默认是 master 分支,当访问默认分支下的配置文件时,该参数可以省略,即第二种访问方式。
    • {suffix}:配置文件的后缀,例如 config-dev.yml 的后缀为 yml。
  • 鉴于这种访问规则,访问“http://localhost:8016/application-dev.yml”,结果如下图。

在这里插入图片描述

  • 访问“http://localhost:8016/application/dev/master”,结果如下图。
    在这里插入图片描述

  • 访问不存在的配置“http://localhost:8016/master/application-ddd.yml”,则读不到对应环境的配置,结果如下图。
    在这里插入图片描述

错误记录:服务启动时会报java.lang.SecurityException: Prohibited package name: java.com.example

在这里插入图片描述

很明显java.lang.ClassLoader.preDefineClass方法首先对类名进行了检查,双亲委派机制发现以java作为一级包名,则抛出安全异常:禁止使用的包名!

这条错误是由Java类加载的“双亲委派模型”所导致的。在双亲委派模型中,由父加载类加载的类,下层加载器是不能加载的,为了保护java的核心代码不被篡改

可以将这个java包删掉也可以放到com包下

在这里插入图片描述

11.5 创建 Config 客户端

  • 在基础工程 spring-cloud-microservice 下,创建一个名为 microservice-cloud-config-client-8017 的 maven模块,并在其 pom.xml 中添加 Spring Cloud Config 客户端的依赖,配置内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-microservice</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>microservice-cloud-config-client-8017</artifactId>

    <dependencies>
        <!--Spring Boot Web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--devtools 开发工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--spring-boot test 测试只能在test包中测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--junit 测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 修改后立即生效,热部署 这个热部署重启得更快 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.8.RELEASE</version>
        </dependency>
        <!--日志-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <!-- Spring Boot 监控模块,完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--引入 Eureka Client 的依赖,将服务注册到 Eureka Server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>
        <!--配置中心客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • 在microservice-cloud-config-client-8017中类路径(/resources 目录)下,创建一个名为 bootstrap.yml 的配置文件,配置如下。
#bootstrap.yml 是系统级别的,加载优先级高于 用户级别application.yml ,负责从外部加载application.yml配置并解析
#对应了java的加载器,根加载器由于用户加载器
server:
  port: 8017
spring:
  application:
    name: microServiceCloudConfigClient  #微服务名称,对外暴漏的微服务名称,十分重要
  cloud:
    config:
      label: master #仓库分支名
      name: application #配置文件名称,如:application-dev.yml 中的 application,或application.yml集成配置文件
      profile: dev #环境名 如:application-dev.yml 中的 application, 中的 dev,或application.yml继承环境中的dev
      #别忘记添加 http:// 否则无法读取
      ##Spring Cloud Config Server地址
      uri: http://localhost:8016
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
  client:
    fetch-registry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka/  #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
      defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #将服务注册到 Eureka Server 集群
  instance:
    instance-id: microservice-cloud-config-server-8016 #自定义服务名称描述信息
    prefer-ip-address: true           #显示访问路径的 ip 地址
    #zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了
ribbon:
  eager-load:
    enabled: true  #关闭懒加载
  # 指的是建立连接后从服务器读取到可用资源所用的时间
  ReadTimeout: 6000
  # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间
  ConnectTimeout: 6000
  MaxAutoRetriesNextServer: 1
  MaxAutoRetries: 1
# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
# zuul中包含actuator依赖
management:
  endpoints:
    web:
      exposure:
        include: health,info,hystrix.stream  #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号
        #include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥
  info:
    env:
      enabled: true   #启用配置里的info开头的变量

info:             #配置一些服务描述信息,监控信息页面显示,,可以判断服务是否正常
  app.name: microservice-cloud-config-server-8016
  company.name: cloud.zk.com
  auth: zk
  email: 123@qq.com
  build.aetifactId: @project.artifactId@
  build.version: @project.version@
  • 在com.example.controller中,创建一个名为 ConfigClientController 的类,通过该类获取配置文件中的配置,代码如下。
package com.example.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 读取配置中心指定配置文件的内容,并展示到页面
 */
@RestController
public class ConfigClientController {
    @Value("${server.port}")
    private String port;

    @Value("${spring.application.name}")
    private String applicationName;

    @Value("${config.info}")
    private String info;

    @Value("${config.version}")
    private String version;

    @GetMapping("/getInfo")
    public String getInfo(){
        return "applicationName is:"+applicationName+" <br/>port is:"+port+"<br/>info is:"+info+"<br/>version is"+version;
    }
}
  • 最后在microservice-cloud-config-client-8017的主启动类上,使用 @EnableEurekaClient 注解开启 Eureka 客户端功能,代码如下。
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class MicroServiceCloudConfigClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicroServiceCloudConfigClientApplication.class, args);
    }

}
  • 启动microservice-cloud-config-client-8017,,使用浏览器访问“http://localhost:8017/getInfo”,结果如下图。
    在这里插入图片描述

问题记录:服务使用了bootstrap.yml 是系统级别的配置文件,启动时却无法加载,报错:springcloud config报错No spring.config.import set

在这里插入图片描述
在这里插入图片描述

问题原因:Spring Cloud 新版本默认将 Bootstrap 禁用,需要将 spring-cloud-starter-bootstrap 依赖引入到工程中:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

下一篇:SpringCloud-29-Spring Cloud Config手动刷新配置

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:18:51  更:2022-10-17 12:20:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 1:49:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码