前言

网上找了配置中心的文章,发现多多少少都有点坑的地方。这文章是建立在Spring-cloud Dalston.RELEASE 版本上,请试用时确定版本是否兼容。像是eureka等,在不同版本的spring cloud,pom依赖都是不同的。

当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置。
原理

我们将配置文件放入git或者svn等服务中,通过一个Config Server服务来获取git中的配置数据,而我们需要使用的到配置文件的Config Client系统可以通过Config Server来获取对应的配置。

步骤

1.向git中上传示例配置文件

文件名:servicestation-dev.properties、servicestation-pro.properties
上传的配置文件
文件内容

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/testproject
jdbc.username=root
jdbc.password=root

对应不同环境。
该文件的命名规则是:{application}-{profile}.properties

2.搭建Config Server

2.1 添加依赖

	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.2 编写ConfigApplication

// @EnableDiscoveryClient // eureka先不加,一会加
@EnableConfigServer //开启配置服务
@SpringBootApplication
public class ConfigApplication {

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

}

2.3 配置server端配置文件

spring.application.name=config-server
server.port=8888

spring.cloud.config.server.git.uri=https://github.com/xxx/config/
spring.cloud.config.server.git.searchPaths=conf
spring.cloud.config.label=master
spring.cloud.config.server.git.username=....
spring.cloud.config.server.git.password=....

在这里插入图片描述

启动该服务,访问该配置文件:
http://localhost:8888/servicestation-dev.properties
访问方式1
其他访问方式:

/{application}/{profile}/[label]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中{label}是指分支,默认是master。

到这步,server端已经启动成功,并且能读到git上的配置文件了,下面建立客户端。

3. Config Client的搭建

3.1 添加依赖 pom.xml

<dependencies>
  	<!-- 必填,不能忽略 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
</dependencies>

3.2 添加bootstrap.yml配置文件

注意:微服务启动时,客户端会先加载bootstrap.yml文件,并从服务端获取配置信息后才加载本地的application.yml文件,所以连接server端的配置信息必须写在bootstrap.yml文件中。

server:
  port: 9008

spring:
  cloud:
    config:
      uri: http://localhost:8888 #配置中心的地址
      profile: dev 
      label: master
  application:
    name: servicestation # 当前微服务的名称
在客户端依然可以配置profile,label,application三个信息,服务端就是依据这三个信息匹配到对应的配置文件

例如上面的配置信息,就是告诉配置中心服务端去git取 servicestation-dev.properties或servicestation-dev.yml文件

添加测试类,测试下配置是否读取到

添加这样一个测试配置的bean

@Component
public class JdbcConfigBean {
    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbc.driverClassName}")
    private String driverClassName;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    @Override
    public String toString() {
        return "JdbcConfigBean [url=" + url + ", username=" + username
                + ", password=" + password + ", driverClassName="
                + driverClassName + "]";
    }
}

如果项目启动报错,例如:

说明没读取到配置,请检查配置是否正确。反之如果启动成功,则是读取到了配置文件。

4. 服务端和客户端加上eureka注册中心

在以上步骤都成功后,方可继续

4.1 服务端的改造

把eureka注册中心服务依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
application.properties加上eureka的配置
# 是否注册eureka服务中心
eureka.client.register-with-eureka=true
# eureka地址  你的eureka地址
eureka.client.serviceUrl.defaultZone: http://localhost:11111/eureka/  

启动类加上注解:
@EnableDiscoveryClient

启动eureka,启动config-server,如下图:
在这里插入图片描述

4.2 客户端的改造

1.添加pom依赖

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

2.修改配置文件

spring:
  cloud:
      config:
        discovery:
          enabled: true #开启通过服务来访问Config Server的功能
          service-id: config-server # 配置中心的application.name
        profile: dev
        label: master
  application:
      name: servicestation

#服务注册中心实例的主机名、端口
#是否向服务注册中心注册自己
#表示是否从eureka服务器获取注册信息
#服务注册中心的配置内容,指定服务注册中心的位置
eureka:
port:11111
instance:
  hostname: localhost
client:
  register-with-eureka: true
  fetch-registry: true
  serviceUrl:
    defaultZone: http://${eureka.instance.hostname}:${eureka.port}/eureka/

3.启动类加上注解
@EnableEurekaClient

4.启动客户端

成功启动,结束

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐