SpringCloud-Config配置中心

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。

一, Git环境搭建

SpringCloud Config的使用主要是通过Git/SVN方式做一个配置中心。

所以在进行配置之前,我们应该先搭建一个git环境,并建立一个用于学习SpringCloud的仓库。将application.yml配置文件放入仓库。

spring:
    profiles:
        active: dev

---
spring:
    profiles: dev
    application:
        name: springcloud-config-dev

---
spring:
    profiles: test
    application:
        name: springcloud-config-test

二,服务端连接Git配置

导入依赖

<dependencies>
    <!--config-->
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <!--actuator完善监控信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

配置application.yml

server:
  port: 3344

spring:
  application:
    name: springcloud-config-server
    # 连接远程仓库
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/petrichot/springcloud-config.git # 通过 config-server可以连接到git,访问其中的资源以及配置~

注意配置文件的内容格式一定义要标准,不然会报错

这个uri是我的代码的克隆地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ayiEHVrh-1617344550094)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\24.jpg)]

配置主配置文件

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

访问 http://localhost:3344/application-dev.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UCujqjei-1617344550099)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\25.jpg)]

三,客户端连接服务端访问远程

首选准备一个客户端配置文件并推到Gitee/Github上

spring:
    profiles:
        active: dev

---
server:
    port: 8201

spring:
    profiles: dev
    application:
        name: springcloud-provide-dept

eureka:
    client:
        service-url:
            defaultZone: http://eureka7001.com:7001/eureka/

---
server:
    port: 8202

spring:
    profiles: test
    application:
        name: springcloud-provide-dept

eureka:
    client:
        service-url:
            defaultZone: http://eureka7001.com:7001/eureka/

新建模块springcloud-config-client-3355

导入依赖

<dependencies>
    <!--config-->
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-client</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <!--actuator完善监控信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

启动config服务端,确保服务端已脸上Git

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i1GILKh-1617344550102)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\26.jpg)]

配置bootstrap.yml

# 系统级别的配置
spring:
  cloud:
    config:
      name: config-client # 需要从git上读取的资源名称,不要后缀
      profile: dev
      label: master
      uri: http://localhost:3344 # 客户端请求服务端

之所以要用bootstrap.yml,是因为启动SpringBoot项目时,会优先读取bootstrap.yml里的配置,然后才会读取application.yml。

再配置application.yml

# 用户级别的配置
spring:
  application:
    name: springcloud-config-client-3355

创建一个controller用于查询当前配置

@RestController
public class ConfigClientController {

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

    @Value("${eureka.client.service-url.defaultZone}")
    private String eurekaServer;

    @Value("${server.port}")
    private String port;


    @RequestMapping("/config")
    public String getConfig(){
        return "applicationName:"+applicationName +
         "eurekaServer:"+eurekaServer +
         "port:"+port;
    }
}

创建主配置类

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

启动config客户端,会发现当我们在bootstrap中配置了profiles: dev时,该服务的端口是8201

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NZz8rpVM-1617344550106)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\28.jpg)]

将profiles配置为test时,该服务的端口是8202

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxrcNBBN-1617344550108)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\27.jpg)]

项目启动的时候会优先读取bootstrap.yml,按照配置的内容去配置中心(config)服务端)拉取配置文件

四,远程配置实战测试

在实际的开发中,为了便于统一管理配置文件,我们可以将各服务的配置文件放在Git上,再像前文中所提到的那样按照配置的内容去配置中心(config)服务端)拉取配置文件。

在Gitee/Github中存放eureka注册中心以及提供者服务的配置文件

config-dept.yml

spring:
    profiles:
        active: dev

---
server:
    port: 8001

#mybatis的配置
mybatis:
    config-location: classpath:mybatis/mybatis-config.xml
    type-aliases-package: com.seinonana.springcloud.pojo
    mapper-locations: classpath:mybatis/mapper/**/*.xml

#spring的相关配置
spring:
    profiles: dev
    application:
        name: springcloud-provider-dept
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource # 数据源
        driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动
        url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC #数据库名称
        username: root
        password: 4560
        dbcp2:
            min-idle: 5 #数据库连接池的最小维持连接数
            initial-size: 5 #初始化连接数
            max-total: 5 #最大连接数
            max-wait-millis: 200 #等待连接获取的最大超时时间

#eureka配置
eureka:
    client:
        service-url:
            defaultZone: http://localhost:7001/eureka
    instance:
        instance-id: springcloud-provider-dept8001 # 重点,和client平级
        prefer-ip-address: true # true访问路径可以显示IP地址

#info配置
info:
    app.name: kuang-springcloud
    company.name: www.kuangstudy.com
    build.artifactId: ${project.artifactId}
    build.version: ${project.version}

---
server:
    port: 8001

#mybatis的配置
mybatis:
    config-location: classpath:mybatis/mybatis-config.xml
    type-aliases-package: com.seinonana.springcloud.pojo
    mapper-locations: classpath:mybatis/mapper/**/*.xml

#spring的相关配置
spring:
    profiles: test
    application:
        name: springcloud-provider-dept
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource # 数据源
        driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动
        url: jdbc:mysql://localhost:3306/db02?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC #数据库名称
        username: root
        password: 4560
        dbcp2:
            min-idle: 5 #数据库连接池的最小维持连接数
            initial-size: 5 #初始化连接数
            max-total: 5 #最大连接数
            max-wait-millis: 200 #等待连接获取的最大超时时间

#eureka配置
eureka:
    client:
        service-url:
            defaultZone: http://localhost:7001/eureka
    instance:
        instance-id: springcloud-provider-dept8001 # 重点,和client平级
        prefer-ip-address: true # true访问路径可以显示IP地址

#info配置
info:
    app.name: kuang-springcloud
    company.name: www.kuangstudy.com
    build.artifactId: ${project.artifactId}
    build.version: ${project.version}

config-eureka.yml

spring:
    profiles:
        active: dev

---
server:
    port: 7001


spring:
    profiles: dev
    application:
        name: spring-config-eureka

eureka:
    instance:
        hostname: eureka7001.com #eureka服务端的实例名称
    client:
        register-with-eureka: false # 是否将自己注册到Eureka服务器中,本身是服务器,无需注册
        fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url: 
            defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

---
server:
    port: 7001


spring:
    profiles: test
    application:
        name: spring-config-eureka

eureka:
    instance:
        hostname: eureka7001.com #eureka服务端的实例名称
    client:
        register-with-eureka: false # 是否将自己注册到Eureka服务器中,本身是服务器,无需注册
        fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url: 
            defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

按顺序启动配置中心服务端,客户端,eureka注册中心,提供者服务

打开http://localhost:7001/确保注册中心已经成功打开

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9vGjP7x3-1617344550109)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\29.jpg)]

访问http://localhost:8001/dept/list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rf5o1b4K-1617344550111)(C:\Users\14284\Desktop\Markdown文档\SpringCloud学习\imgs\30.jpg)]

注意,我们如果修改了Git上的配置文件,就应该重新启动该服务,尽管我们直接从配置中心3344端口能够查看到新的配置。但是服务是一启动的时候就在bootstrap.yml配置的配置中心地址去拿到配置的,是固定的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值