在后端开发中,配置文件的配置是必不可少的步骤,比如使用Spring进行后端系统开发的时候,就需要在yaml或者properties文件中配置数据库地址、redis地址、rocketMQ地址和kafka地址等等。
spring.datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://*****.mysql.rds.aliyuncs.com:3306/demo?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
username: root
password: root
如上,在yaml中配置了MySQL数据库地址。
配置文件看是很简单,但是在实际的开发中会根据业务拆分很多的应用程序,因此每当新加一个应用,就需要在本地配置yaml文件,这也造成了配置分散,其会导致一些问题:
-
配置难以管理:如果配置分散在多个地方,当需要修改某个配置时,就需要在多个地方进行修改,增加维护难度。 -
配置容易出错:如果配置分散在多个地方,那么就容易出现配置错误的情况,例如在一个地方修改了配置,但是忘记在其他地方同步修改,这会导致应用程序出现不可预知的行为。 -
配置不易重用:如果配置分散在多个地方,那么就不容易重用,例如在多个应用程序之间共享配置,就需要将配置从各个应用程序中提取出来,这会增加工作量。
因此,为了避免以上的问题,最好将配置集中在一个地方。这样可以使配置更易于管理、更容易重用,并且减少配置错误的可能性。
接下来,使用Spring Cloud Config实现配置中心配置。
首先来介绍一下,Spring Cloud Config的组成部分和实现原理:
如图所示,搭建配置中心包括三个模块:Config Client、Config Server和Git仓库。
其工作原理为:
-
配置文件存储于Git仓库,当应用程序启动时,Config Server会从存储中读取配置文件; -
Config Client会向Config Server发送HTTP请求获取配置文件,其中Config Server会根据请求中的应用程序名称和配置文件名称返回对应的配置文件; -
当配置文件发生改变时,会通过kafka进行消息推送给Config Server;此时,Config Server会通知Config Client刷新配置,Config Client会重新向Config Server发送HTTP请求获取最新的配置文件; -
Spring Cloud Config也支持多种安全机制,保证了配置文件传输的安全,比如Spring Security。
以下是一个Spring Cloud Config Server的DEMO案例:
-
首先,在pom.xml文件中添加以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
-
然后,在应用程序的配置文件中添加以下内容
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-repo/config-repo.git # 配置文件所在的Git仓库地址
search-paths: '{application}' # 配置文件所在的路径
username: your-username # Git仓库的用户名
password: your-password # Git仓库的密码
server:
port: 8888 # 配置服务的端口号
-
接下来,在启动类上添加@EnableConfigServer注解,开启配置服务
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
最后,在Git仓库中创建一个名为”application.properties”的配置文件,添加以下内容
message=Hello, World!
-
启动应用程序,访问”http://localhost:8888/application/default”,即可获取到配置文件中的内容
{
"name": "application",
"profiles": [
"default"
],
"label": null,
"version": "a9d8f7b6c5e4d3f2",
"state": null,
"propertySources": [
{
"name": "https://github.com/your-repo/config-repo.git/application.properties",
"source": {
"message": "Hello, World!"
}
}
]
}
Config Client DEMO案例
-
接下来,需要创建一个Spring Boot项目作为Config Client。在pom.xml中添加以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
-
然后,在应用程序类上添加 @SpringBootApplication
注解,并创建一个Controller来测试配置是否成功
@RestController
@SpringBootApplication
public class ConfigClientApplication {
@Value("${message:Hello default}")
private String message;
@GetMapping("/message")
public String getMessage() {
return message;
}
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
在上面的例子中,我们使用@Value
注解将配置文件中的message
属性注入到Controller中。如果配置文件中没有message
属性,它将使用默认值Hello default
。
-
最后,在application.yml文件中配置Config Client的相关属性
spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:8888
name: config-client
-
测试
现在,我们可以启动Config Server和Config Client,并访问Config Client的/message
端点来测试配置是否成功。如果一切正常,你应该能够看到Config Server返回的配置值。
综上所述,介绍了Spring Cloud Config的组成、原理和配置,Spring Cloud目前涉及很多模块,值得去探索。
对于SpringBoot项目如何搭建可以参考:如何搭建一个SpringBoot项目
原文始发于微信公众号(CodeJames):配置文件中心化管理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/148164.html