Spring Cloud之配置中心的搭建
作者:Java同学会 发布时间:2023-04-02 21:19:49
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。
来源:https://www.jianshu.com/p/799835bd5ccf


猜你喜欢
- Android手势解锁密码效果图 首先呢想写这个手势密码的想法呢,完全是凭空而来
- 在上一讲中 OkHttp下载文件并带进度条 中,我们知道怎样去下载文件了。那上传文件呢一、编写服务器端在上一讲服务器下新建UploadFil
- 在[高并发Java 二] 多线程基础中,我们已经初步提到了基本的线程同步操作。这次要提到的是在并发包中的同步控制工具。1. 各种同步控制工具
- 使用java来实现一个简单的计算器,供大家参考,具体内容如下最近使用java制作了一个计算器,菜单栏里的功能没有实现,只是写一个版式,仅仅实
- 注解类@Documented@Target({ElementType.METHOD})@Retention(RetentionPolicy.
- 缘起经过前面三章的入门,我们大概了解了Mybatis的主线逻辑是什么样子的,在本章中,我们将正式进入Mybatis的源码海洋。Mybatis
- 在文件夹中,我们经常有类似s_1.txt、s_2.txt、s_10.txt、s_11.txt这样的命名方式,我们期望的排序方式是s_1.tx
- 前言注解是Java很强大的部分,但大多数时候我们倾向于使用而不是去创建注解。例如,在Java源代码里不难找到Java编译器处理的@Overr
- 在这篇文章中,我精选了几个比较适合 Java 编码的 IDEA 主题供小伙伴们选择。另外,我自己用的是 One Dark theme 这款。
- 场景做为一个码农,大部分都集中在一二线城市,所以租房也就无可避免,面对如今五花八门的租房信息,往往很难找到合适的房子。而如今的这些租房软件,
- java中的LIST在删除时,一般会用list.remove(o); 但这样往往会出现问题,先来看下面的这段代码:package com.d
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- Android 资源文件夹 Layout 文件夹Layout文件是存放Android的布局文件的资源文件夹,但是如果你想要在里面创建子文件夹
- 1、super的使用:(1)super是一个关键字。(2)super和this很类似,我们对比着学习。2、先复习一下this关键字的使用。(
- 本文实例为大家分享了Unity实现虚拟键盘的具体代码,供大家参考,具体内容如下这是一个网上找的插件,自己改了点东西,方便使用在项目中。暂时不
- 这篇文章主要介绍了java多线程关键字final和static详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 这篇文章主要介绍了如何使用java修改文件所有者及其权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 目录I. 项目环境1. 项目依赖II. 缓存注解介绍1. @Cacheable2. @CachePut3. @CacheEvict4. @C
- 一、概述EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在F
- 目录1. 前言2. 栈帧3. 分析4. 总结1. 前言在刚开始学习Java的时候,大家肯定都接触过this关键字,尤其是在构造函数赋值的时候