019 搭建config配置中心

1 config配置中心

    1-1 pom依赖

        这里引入 spring-cloud-config-server 即可,spring-boot-starter-security 只是为了给配置中心加一个访问验证,可以忽略该引用:

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
	</dependencies>
	
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR3</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

    1-2 配置文件 application.yml

    研发项目时,公司肯定会有几套环境,生产、测试、开发、本地等,所以我们的配置文件也应该是分别对应的,下图中是一个示例:config-file 是远程的git仓库,test 是项目下的一级文件夹,test下有两个文件夹分别存放 prd 和 dev 环境的配置文件,application.properties 是公用配置文件,config-test.properties中的 config-test 是其中一个微服务的名称,这样微服务公共的配置放到 application.properties,微服务个性化的配置在各自的配置文件中。注意:微服务的个性化配置会覆盖 application.properties 中的相同配置。

    下面的配置默认加载远程仓库 test/dev 下的配置,如果密码中含有特殊字符,可以加转义符“\”,或者直接用单引号 “ ‘ ” 将密码引起来,这里用户名默认为user,密码:12345

spring:
  cloud:
    config:
      server:
        git:
          uri: https://code.aliyun.com/995586041/config-file.git
          searchPaths: test/dev
          username: [email protected]
          password: ',******'
          repos:
            prd:
              pattern: "*/prd*"
              uri: https://code.aliyun.com/995586041/config-file.git
              searchPaths: test/prd
              username: [email protected]
              password: \,******
            dev:
              pattern: "*/dev*"
              uri: https://code.aliyun.com/995586041/config-file.git
              searchPaths: test/dev
              username: [email protected]
              password: ',******'
server:
  port: 8888
security:
  user:
    password: ${CONFIG_SERVICE_PASSWORD:12345}

    1-3 启动类

        加上 @EnableConfigServer 注解即可

@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {

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

    1-4 访问

        http://localhost:8888/test/application,如果上面设置了访问密码,会提示输入用户名和密码,填入相关信息进行验证,然后可以看到相关配置信息:

2 测试配置中心

    1-1 pom文件

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
	</dependencies>

    1-2 配置文件 bootstrap.properties

        这里配置文件使用 bootstrap.properties,项目启动时会先加载 bootstrap.properties 然后再加载 application.properties,这里我们指定 prd ,这样我们就可以指定了配置文件,注意这里的微服务名称为:config-test ,下边会用到

server.port = 8082
spring.profiles.active = prd
spring.application.name = config-test

spring.cloud.config.uri = http://127.0.0.1:8888

spring.cloud.config.fail-fast = true
spring.cloud.config.username = user
spring.cloud.config.password = 12345
spring.cloud.config.profile=prd

goldleaf.test01 = test01 ${spring.profiles.active} bootstrap.properties
goldleaf.test05 = test05 ${spring.profiles.active} bootstrap.properties
goldleaf.test06 = test06 ${spring.profiles.active} bootstrap.properties

    1-3 启动类及测试接口

        可以看到,我们这里并没有加有关配置中心的特殊注解,我只是写了一个测试接口

@SpringBootApplication
@RestController
public class UserApplication {

	@Value("${goldleaf.test01}")
	private String test01;

	@Value("${goldleaf.test02}")
	private String test02;

	@Value("${goldleaf.test03}")
	private String test03;

	@Value("${goldleaf.test05}")
	private String test05;

	@Value("${goldleaf.test06}")
	private String test06;
	
	public static void main(String[] args) {
		SpringApplication.run(UserApplication.class, args);
	}
	
	@GetMapping("/test")
	public String getConfig() {
		StringBuilder builder = new StringBuilder();
		builder.append("test01:" + test01 + "\r\n");
		builder.append("test02:" + test02 + "\r\n");
		builder.append("test03:" + test03 + "\r\n");
		builder.append("test05:" + test05 + "\r\n");
		builder.append("test06:" + test06 + "\r\n");
		return builder.toString();
	}
}

    1-4 测试

        现在我们有了三个配置文件:项目里的 bootstrap.properties、远程的 application.properties 和远程的 config-test.properties。配置说明:1). 在上面三个文件中分别定义了 test01、test02、test03,用来说明三个配置文件中的配置都是起作用的;2). 在上面三个文件中同时定义了test05,用来说明三个文件的优先级;3). 在 bootstrap.properties 和 application.properties 中同时定义了 test06 ,用来确定二者的优先级。启动项目之后,现在我们通过访问 config-test 的test接口查看一下结果:

        

        test01-03,说明三个文件中的配置都有加载;test05 说明微服务的个性化配置会覆盖前面的配置,优先级最高;test06 说明默认情况下远程仓库的 application.properties 优先级高于 bootstrap.properties

        优先级顺序:远程config-test > 远程application.properties > 本地bootstrap.properties

3 本地覆盖远程配置

    在远程仓库的git仓库中添加下列配置:

# 允许本地配置覆盖远程配置
spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false

    然后访问测试接口:http://127.0.0.1:8082/test,test05、test06加载的是本地bootstrap.properties中的配置信息:

4 手动刷新配置

    开发的时候,难免会更改某些配置,如果每次更改配置都进行服务的重新发布,有点让人头大,所以我们在更改配置文件之后,手动刷新一下配置。

    在非config端的pom文件中增加 spring-boot-starter-actuator 依赖:

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
	</dependencies>

    修改git仓库的配置文件之后,POST方式调用服务的 /refresh 端点,如:http://127.0.0.1:8082/refresh 这里会返回有哪些配置点被修改:

    查看结果:

猜你喜欢

转载自my.oschina.net/u/2937605/blog/1808485