Spring Cloud配置中心(Config)

Spring Cloud配置中心(Config)

Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件。比如:配置中心、Eureka服务发现、 消息总线、熔断机制等。

配置中心在Spring Cloud的众多组件中是比较基础的,它提供了配置文件的统一管理,可以很轻松的切换不通的环境。 它的具体结构如下:

  • 存储配置文件的文件系统(通常使用git)
  • 配置中心服务端(从文件系统获取最新的配置文件,为客户端提供配置信息)
  • 配置客户端(从配置中心获取配置信息)

Spring Cloud是建立在Spring Boot基础上的,Spring Cloud离不开Spring Boot,所以我们的项目都是基于Spring Boot的。

配置文件一般我们放在git上,也好做版本控制。接下来我们讲一下配置中心的搭建。

配置中心搭建

首先,引入Spring Boot和Spring Cloud的依赖BOM:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Edgware.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

这里我们需要仔细看一下官方文档,Spring Cloud的Finchley版本是基于Spring Boot2.0的,在Spring Boot1.5下 是不能工作的。而Edgware版本是基于1.5的,在2.0下不能正常工作。这点大家要注意,以免出现不必要的麻烦。 这里我们采用Spring Cloud 的Edgware和Spring Boot的1.5版本。

然后倒入必须的依赖,如下:

<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>

最后编写配置中心的启动类,如下:

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

@EnableConfigServer标志着这个服务是一个配置中心服务,具体的信息在application.properties文件中配置:

#服务端口
server.port=9000
#配置文件的git地址
spring.cloud.config.server.git.uri=https://github.com/liubo-tech/spring-cloud-properties
#配置文件的临时文件目录
spring.cloud.config.server.git.basedir=/d:/config-repo

服务端口和git地址大家都比较明白,第三个是配置临时文件的目录。在配置中心被调用后,配置中心会从git 上拉取配置文件,并在本地缓存,这个就是配置缓存的目录,也可以不配置,使用系统默认的。 这样配置中心就搭好了,也可以通过Nginx搭建集群做的高可用。

访问配置文件格式的如下:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

其中:

  • {application}对应客户端的应用名称(spring.application.name)
  • {profile}对应客户端的spring.profiles.active
  • {label}是可选的git标签(默认为“master”)。

客户端调用

以前配置文件都是放在项目中,这使得我们在切换不同环境时非常麻烦,一些配置的敏感信息也对开发人员暴露了。 使用统一的配置中心就可以避免这些,让我们看一看客户端是如何调用的。

首先,导入必须依赖的jar包,如下:

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

只要Spring Cloud Config Client的jar在项目的classpath下,它就会在项目启动时从配置中心获取配置,通过 bootstrap配置文件中的spring.cloud.config.uri属性指定配置中心。

这使得客户端的项目必须有一个bootstrap.yml或者bootstrap.properties文件,否则客户端是不会从配置中心加载配置文件的。

我们创建bootstrap.properties,如下:

#配置中心地址
spring.cloud.config.uri=http://localhost:9000

指定配置中心的地址,上面的例子中,配置中心的端口我们指定9000。我们在application.properties文件中配置应用的名称:

spring.application.name=eg-config

我们应用叫作“eg-config”,项目启动时会从配置中心加载eg-config的文件。接下来我们做个例子,创建一个Bean,并从配置中心注入值

@Component
public class MyBean {
    @Value("${my.name}")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

其中,name会从配置中心加载属性my.name。启动类如下:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
        //获取bean并打印name字段
        MyBean bean = applicationContext.getBean(MyBean.class);
        System.out.println(bean.getName());
    }

}

启动后,控制台打印的结果如下:

test

这样配置中心就介绍完了,具体请参考项目示例:https://github.com/liubo-tech/spring-cloud-config

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA同学会

Spring Cloud 服务的注册与发现(Eureka)

Eureka Server是服务的注册中心,这是分布式服务的基础,我们看看这一部分如何搭建。

1594
来自专栏LeoXu的博客

Tapestry 教程(二)依赖、工具以及插件

在我们深入代码之前,首先必须整好开发环境。你应该已经有了一些,或者因为各种原因,在你的开发机上全都已经有了。

1032
来自专栏轻量级微服务

微服务下使用网关 Spring Cloud Gateway

客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则将其发送到网关 Web 处理程序,此处理程序运行特定的请求过滤...

1230
来自专栏nummy

python 虚拟环境的使用

python3.3+已经支持虚拟环境,无需安装格外的包,通过以下命令即可创建虚拟环境:

1104
来自专栏CaiRui

Python flask虚拟环境安装

1、安装virtualenv ? 2、在当前路径下创建文件夹,启动虚拟环境 ? 3、在使用虚拟环境前需激活,前面出现(env说明在虚拟环境中)。虚拟环境中默认安...

25210
来自专栏青玉伏案

JavaEE开发之SpringBoot工程的创建、运行与配置

本篇博客我们就来聊一下如何使用Eclipse+STS插件来创建Spring Boot的工程。Spring Boot可以使我们更容易的使用Spring框架,在Sp...

27210
来自专栏zhisheng

Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/

1032
来自专栏Java帮帮-微信公众号-技术文章全总结

springboot学习教程【面试+工作】

4163
来自专栏Web项目聚集地

从零学习Spring MVC框架「环境搭建和MVC架构」

这是Spring MVC框架教程的第一篇,首先为大家讲解MVC架构思想,MVC模式并不是Javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把...

1252
来自专栏静默虚空的博客

[Spring]01_环境配置

1.1 Spring jar包下载 (1)进入官网http://repo.spring.io (2)在资源库界面点击Artifacts标签,然后点击libs-...

1949

扫码关注云+社区

领取腾讯云代金券