Spring Cloud之配置中心的搭建

 更新时间:2018年07月04日 09:45:40   作者:Java同学会  
这篇文章主要介绍了Spring Cloud之配置中心的搭建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

它的具体结构如下:

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

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

其中:

  1. {application}对应客户端的应用名称(spring.application.name)
  2. {profile}对应客户端的spring.profiles.active
  3. {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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java正则表达式匹配规则超详细总结

    java正则表达式匹配规则超详细总结

    正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别,下面这篇文章主要给大家介绍了关于java正则表达式匹配规则的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • SpringBoot下实现session保持方式

    SpringBoot下实现session保持方式

    这篇文章主要介绍了SpringBoot下实现session保持方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java实现二叉树的创建及5种遍历方法(总结)

    java实现二叉树的创建及5种遍历方法(总结)

    下面小编就为大家带来一篇java实现二叉树的创建及5种遍历方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 全面解析@InsertProvider执行原理

    全面解析@InsertProvider执行原理

    这篇文章主要介绍了全面解析@InsertProvider执行原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 浅谈SpringMVC HandlerInterceptor诡异问题排查

    浅谈SpringMVC HandlerInterceptor诡异问题排查

    这篇文章主要介绍了浅谈SpringMVC HandlerInterceptor诡异问题排查,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Java适配器模式应用之电源适配器功能详解

    Java适配器模式应用之电源适配器功能详解

    这篇文章主要介绍了Java适配器模式应用之电源适配器功能,较为详细的分析了适配器模式的概念、原理及Java基于适配器模式实现电源适配器功能的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  • Java实现拓扑排序算法的示例代码

    Java实现拓扑排序算法的示例代码

    在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。本文将为大家讲讲拓扑排序算法的原理及实现,需要的可以参考一下
    2022-07-07
  • Maven学习----Maven安装与环境变量配置教程

    Maven学习----Maven安装与环境变量配置教程

    这篇文章主要给大家介绍了关于如何利用Maven入手Spring Boot第一个程序的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • Java实现简单文件过滤器功能

    Java实现简单文件过滤器功能

    下面小编就为大家分享一篇Java实现简单文件过滤器功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Java的Junit测试框架中的其他注解说明

    Java的Junit测试框架中的其他注解说明

    这篇文章主要介绍了Java的Junit测试框架中的其他注解说明,JUnit是一个开源的java单元测试框架,它是XUnit测试体系架架构的一种体现,
    是Java语言事实上的标准单元测试库,需要的朋友可以参考下
    2023-10-10

最新评论