SpringCloud的配置中心

1.git准备工作

新建个git项目:https://gitee.com/xxx/spring-cloud.git

master分支下建三个文件:

config-dev.yml

config:
  info: "config info for dev(master)"

config-prod.yml

config:
  info: "config info for prod(master)"

config-test.yml

config:
  info: "config info for test(master)"

dev分支下建三个文件:

config-dev.yml

config:
  info: "config info for dev(dev)"

config-prod.yml

config:
  info: "config info for prod(dev)"

config-test.yml

config:
  info: "config info for test(dev)"

2.Config服务器

<properties>
		<spring.cloud-version>Hoxton.SR8</spring.cloud-version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
			<version>2.3.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>2.3.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.10.1</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.6</version>
		</dependency>

	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring.cloud-version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
server:
  port: 8901

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxx/spring-cloud.git
          #username: aaa
          #password: bbb
		  clone-on-start: true
		  #search-paths: 'config'
  security:
    user:
      name: root
      password: 123456
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka/
@EnableConfigServer
@SpringBootApplication
public class ConfigApp {
	public static void main(String[] args) {
		new SpringApplicationBuilder(ConfigApp.class).web(WebApplicationType.SERVLET).run(args);
	}
}

为什么要添加spring-boot-starter-security并在yml里配置账户密码,因为作为配置中心,是针对服务内部的,一定要保证安全

启动之后访问:
http://localhost:8901/master/config-dev
输入账户密码

{"name":"master","profiles":["config-dev"],"label":null,"version":"09dca135f5a242bf0f7cbb46ba1872d1ea10488e","state":null,"propertySources":[]}

再访问http://localhost:8901/master/config-dev.yml就会发现配置文件出来了。

config:
  info: "config info for dev(master)"

这个访问的路径的格式是什么?

# 获取配置信息
/{label}/{application}-{profile}
# 获取配置文件信息
/{label}/{application}-{profile}.yml

占位符相关解释

application:代表应用名称,默认为配置文件中的spring.application.name,如果配置了spring.cloud.config.name,则为该名称;
label:代表分支名称,对应配置文件中的spring.cloud.config.label;
profile:代表环境名称,对应配置文件中的spring.cloud.config.profile。

也可以访问http://localhost:8901/dev/config-prod.yml等

3.Config-client模块

3.1基本功能

<properties>
		<spring.cloud-version>Hoxton.SR8</spring.cloud-version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>2.3.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.10.1</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.6</version>
		</dependency>

	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring.cloud-version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

bootstrap.yml

server:
  port: 9001

spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      profile: dev
      name: config
      #uri: http://localhost:8901
      username: root
      password: 123456
      discovery:
        enabled: true
        service-id: config-server
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka/
@RestController
@SpringBootApplication
public class ConfigCliApp {
	public static void main(String[] args) {
		new SpringApplicationBuilder(ConfigCliApp.class).web(WebApplicationType.SERVLET).run(args);
	}
	@Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}

注意:

  • 客户端的启动yml不是application.yml,而是bootstrap.yml.bootstrap.yml是在引导的时候读取,而application.yml是之后参数赋值读取.这里需要在引导的时候启动config.
  • spring.cloud.discovery代替了spring.cloud.uri.他比uri要好,虽然uri明确指定config服务器.但是config服务器肯定不能只启动一个,它必须启动多个来面对灾难.那么指定单一的uri是没有什么用处的.应当指定服务id进行负载均衡.

启动好之后我们访问:http://localhost:9001/configInfo 就可以master分支的config-dev.yml里的内容配置

3.2刷新配置

如果git文件更新了,那么客户端也同样需要做些刷新操作来更新.

要添加actuator的refresh模块.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
management:
  endpoints:
    web:
      exposure:
        include: 'refresh'

给@Value类里添加一个@RefreshScope注解

@RefreshScope
@RestController
@SpringBootApplication
public class ConfigCliApp {
	public static void main(String[] args) {
		new SpringApplicationBuilder(ConfigCliApp.class).web(WebApplicationType.SERVLET).run(args);
	}
	@Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}

每当git文件改变时,使用post方法,访问client的http://localhost:9001/actuator/refresh 就可以执行刷新.注意,是post不是get

集群

更换端口启动多个即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值