SpringCloud之配置中心
一、springCloud核心组件config微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。Spring Cloud 提供了 ConfigServer来解决这个问题.Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置
目录
一、创建新模块,名叫config-client,继承父项目依赖
三、在nacos配置中心,新增两个配置中心,一个是私有配置中心,另一个是共享配置中心
一、springCloud核心组件config
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。
由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。
Spring Cloud 提供了 ConfigServer来解决这个问题.
Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服 务应用的所有环境提供了一个中心化的外部配置。
SpringCloud Config 分为服务端和客户端两部分。
服务端也称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置 信息,加密/解密 信息等访问接口。
客户端则是通过制定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心 获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并 且可以通过git客户端工具来方便的管理和访问配置内容。
一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同: 不同环境不同配置:例如数据源在不同的环境(开发,测试,生产)是不同的,可以通过配置中心 运行期间可以动态调整。例如根据各个微服务的负载状况,动态调整数据源连接池大小或者熔断阀 值,并且调整时不停止微服务(配置修改后可以自动更新)
config的作用:
以一个场景来讲解config的作用,比如现在在做一个团队项目,项目中有一个核心配置文件,组内中几个组员都是使用该配置文件,如果组长将项目配置文件进行更改之后,组员就要重新导入组长的文件,并且要重新启动项目,这很麻烦,这时候config就起到的作用,组长在nacos上进行注册服务之后,组长更新了文件之后,config就会进行自动更新,然后组员重新刷新文件,组员就可以用了。
二、springCloud配置中心
一、创建新模块,名叫config-client,继承父项目依赖
在父项目中导入nacos依赖以及bootstrap依赖,使得nacos成为配置中心,
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
二、新增配置文件,使得原始文件依赖新文件
bootstrap.yml:
server: port: 8084 spring: application: # 会自动根据服务名拉取data-id对应的配置文件.如果data-id跟服务名不一致 就需要手动指定data-id # 跟服务名相同的data-id的配置文件,称之为默认的配置文件 # 除了默认的配置文件,其他配置文件必须写上后缀 name: config-client cloud: nacos: discovery: #服务中心 server-addr: 127.0.0.1:8848 # username: nacos # password: nacos config: #配置中心 prefix: ${spring.application.name} #指定nacos配置中心地址 server-addr: 127.0.0.1:8848 file-extension: yml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties #namespace: 4d3f7efb-129b-44aa-b786-25762ef8e66d # 使用的 nacos 的命名空间,默认为 null group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP # 共享配置集数组 shared-configs: - data-id: config-redis.yml group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP refresh: true # 是否自动刷新配置,默认为 false
而原始文件中内容为空:
为什么要使用bootstrap.yml文件:
SpringBoot默认支持properties和YAML两种格式的配置文件。
bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使 用来配置application.yml中使用到参数等
application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用 的公共参数等。
bootstrap.yml 先于 application.yml 加载
三、在nacos配置中心,新增两个配置中心,一个是私有配置中心,另一个是共享配置中心
注意:
四、将模块进行打包运用,使配置中心更加灵活
目的:使的nacos更加灵活,方便开发
1、将项目进行打包
2、找到打包后的jar包所在地,并拖取到桌面
找到jar包的两种方式
1、在本模块中target找到jar包
2、在本地仓库的依赖中找到jar包
3、使用cmd进入到desktop中运行此jar包
优点:就可以手动的在配置模块的启动类中进行启动
回车即可运行
五、进行远程配置读取
新建一个读取类:并且加入在类上加上注解
@RestController
@RefreshScope
package com.zj.configclient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class TestController {
@Value("${email.host}")
private String host;
@Value("${email.username}")
private String username;
@Value("${email.password}")
private String password;
@Value("${redis.hosts}")
private String hosts;
@Value("${redis.port}")
private String port;
@Autowired
private EmailProperties emailProperties;
@RequestMapping("/test01")
public String test01(){
StringBuffer sb=new StringBuffer("");
sb.append("<b>host</b>:"+host);
sb.append("<b>username</b>:"+username);
sb.append("<b>password</b>:"+password);
sb.append("<b>emailProperties</b>:"+emailProperties);
sb.append("<b>hosts</b>:"+hosts);
sb.append("<b>port</b>:"+port);
return sb.toString();
}
@Configuration
@ConfigurationProperties(prefix = "email")
@Data
public class EmailProperties{
private String host;
private String username;
private String password;
}
}
里面有两种读取方式:也就是yml注入
第一种:用value形式读取
@Value("${email.host}")
private String host;
@Value("${email.username}")
private String username;
@Value("${email.password}")
private String password;
@Value("${redis.hosts}")
private String hosts;
@Value("${redis.port}")
private String port;
@RequestMapping("/test01")
public String test01(){
StringBuffer sb=new StringBuffer("");
sb.append("<b>host</b>:"+host);
sb.append("<b>username</b>:"+username);
sb.append("<b>password</b>:"+password);
sb.append("<b>emailProperties</b>:"+emailProperties);
sb.append("<b>hosts</b>:"+hosts);
sb.append("<b>port</b>:"+port);
return sb.toString();
}
第二种:新建一个资源类来读取:
@Configuration
@ConfigurationProperties(prefix = "email")
@Data
public class EmailProperties{
private String host;
private String username;
private String password;
}
运行结果:
六、进行切分环境配置
在一个大的项目中,不可能只有一个环境,并且是有多个环境
新建两个环境,一个叫dev(开发环境),一个叫test(测试环境),内容和默认环境中的一样,可以更加config-redis中的内容:
以dev为例:
dev中的config-client:
dev中的config-redis:
之后就是test环境的中的配置,和dev中的配置一模一样。
因为自己已经配置好了环境,那么将bootstrap文件中的内容环境空间注释掉:
用cmd进行测试:
java -jar xx.jar --spring.cloud.nacos.config.namespace=xxx
此编码语句用来更新环境配置中的内容,也就是可以实现组长改变项目中环境内容,组员就可以及时更新
现在是运行的是test环境的内容
更改配置中的内容时:
然后进行刷新:
配置成功。
今天的知识就分享到这里了,希望对你有帮助
更多推荐
所有评论(0)