目录
- 前言
- 外置配置
- 多模块共享配置
- 动态刷新日志级别
- 多环境配置
- 总结
前言
老顾之前介绍过多个子项目如何设计配置文件,以及多环境下如何配置文件;小伙伴如果仔细想一下,之前的文章的解决方案还有有些问题。
第一:配置多环境还是比较麻烦,Maven插件配置麻烦
第二:配置信息暴露给了开发人员
第三:不能动态改变配置内容,如:生成环境中日志级别一般为warn,但如果线上报错了,需要排查问题,有时候是需要把日志级别调整一下;一般是需要把应用服务停止,改下日志级别后再启动应用服务;这种就比较麻烦,
那能不能不需要重启服务的情况下,就能改变日志级别呢?外置配置
老顾这里利用之前介绍过的nacos配置中心方案,小伙伴们就一步步跟这老顾的思路。首先我们是否可以利用nacos解决配置信息暴露的问题。
我们首先需要在POM文件中引入nacos的config依赖包
<code><dependency>
<groupid>com.alibaba.cloud/<groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-config/<artifactid>
/<dependency>/<code>
然后我们在项目配置文件bootstrap.yml,必须是bootstrap.yml文件哦
<code>spring:
application:
name: config-service
cloud:
#nacos相关配置
nacos:
#注册中心服务地址
discovery:
register-enabled: true
server-addr: 127.0.0.1:8848
#配置中心服务地址
config:
server-addr: 127.0.0.1:8848
file-extension: yml/<code>
我们一般项目都会在application.yml中配置datasource数据源信息,以及redis分布式缓存的配置信息,如:
<code>spring:
datasource:
name: rainbow
url: jdbc:mysql://localhost:3306/rainbow
username: root
password: 123456
redis:
database: 0
host: localhost
password:
port: 6379/<code>
我们会发现一些重要的配置信息暴露了出来,如:url链接地址,用户名,密码
如果我们通过application-dev.yml,application-sit.yml,application-uat.yml,application-prod.yml方式实现多环境;
那dev环境,sit环境,uat环境,prod环境都会暴露出来。
那我们有没有什么方法不让开发人员轻易发现信息,或者说如果外置这些配置信息。我们通过nacos的加载配置文件机制解决这个问题
nacos会自动加载${prefix}-${spring.profile.active}.${file-extension}配置文件信息,
1、prefix 默认为 spring.application.name 的值 ,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。
2、spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置。
3、file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在
dataId 的拼接格式变成 prefix.{file-extension}
那我们可以利用spring.profile.active属性,设置db,以及redis配置信息
<code>spring:
application:
name: config-service
cloud:
#nacos相关配置
nacos:
#注册中心服务地址
discovery:
register-enabled: true
server-addr: 127.0.0.1:8848
#配置中心服务地址
config:
server-addr: 127.0.0.1:8848
file-extension: yml
profiles:
active:
- db
- redis/<code>
我们需要在nacos配置中心新建文件
这样的配置后,就无须在application.yml中配置db和redis配置信息了,启动时nacos客户端先去nacos配置中心读取配置,并加载初始化一些Bean。
这样就很好的起到了配置信息外置的方式,而且我们可以很方便的修改信息。
多模块共享配置
因为很多子模块都会需要链接数据库以及redis,而且他们的配置信息是一样的,那我们就不需要每个模块都要配置一次,我们只要利用nacos的共享配置机制
<code>spring:
application:
name: config-service
cloud:
#nacos相关配置
nacos:
#注册中心服务
discovery:
register-enabled: true
server-addr: 127.0.0.1:8848
#配置中心服务
config:
server-addr: 127.0.0.1:8848
file-extension: yml
shared-configs:
- db.yml
- redis.yml/<code>
这样每个子模块都这样配置,就只需要共享此配置文件。
用了shared-configs属性
动态刷新日志级别
那我们如何在线刷新日志级别呢?其实也很简单
<code>spring:
application:
name: config-service
cloud:
#nacos相关配置
nacos:
#注册中心服务
discovery:
register-enabled: true
server-addr: 127.0.0.1:8848
#配置中心服务
config:
server-addr: 127.0.0.1:8848
file-extension: yml
shared-configs:
- db.yml
- redis.yml
profiles:
active:
- log/<code>
日志配置内容
业务中的日志代码
<code>log.error("这是一条error");/<code>
log.warn("这是一条warn");
log.info("这是一条info");
log.debug("这是一条debug");
直接通过nacos的配置,动态可以更新应用服务的日志级别
多环境配置
多环境配置推荐利用nacos的命名空间方案,可以很好的实现。
可以在外部启动jar时,通过外部参数传入
<code>java -jar config-server.jar --spring.cloud.config.namespace=a1a8bb58-18a6-4e3e-a584-6adb109d7a85/<code>
总结
以上就是利用配置中心实现多项目模块,配置外置的方法,也能够实时刷新日志级别。
---End---
老顾的微服务网关分享课程,请大家多多支持
a、
b、
c、
1、基于RocketMq的SpringCloud Stream框架实战入门
2、如何搭建消息中间件应用框架之SpringCloud Stream
3、面试必备:网关异常了怎么办?如何做全局异常处理?
4、Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则
5、Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍
6、API网关在微服务架构中的应用,这一篇就够了
7、 学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)
8、Lambda用在哪里?几种场景?
9、为什么会出现Lambda表达式,你知道吗?
10、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用
11、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构
12、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足
13、阿里P7二面:聊聊零拷贝的原理
14、秒杀系统的核心点都在这里,快来取
15、你了解如何利用token方式实现分布式Session吗?
16、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂
17、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调
18、企业实战Redis全方面思考,你思考了吗?
19、面试题:Thread的start和run的区别
20、面试题:什么是CAS?CAS的作用以及缺点
21、如何访问redis中的海量数据?避免事故产生
22、如何解决Redis热点问题?以及如何发现热点?
23、如何设计API接口,实现统一格式返回?
24、你真的知道在生产环境下如何部署tomcat吗?
25、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案
26、分享大厂分布式唯一ID设计方案,快来围观
27、你想了解一线大厂的分布式唯一ID生成方案吗?
28、你知道如何处理大数据量吗?(数据拆分篇)
29、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)
30、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?
31、你了解大型网站的页面静态化吗?
32、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?
33、你知道怎么解决DB读写分离,导致数据不一致问题吗?
34、DB读写分离情况下,如何解决缓存和数据库不一致性问题?
35、你真的知道怎么使用缓存吗?
36、如何利用锁,防止缓存击穿?重构思想的重要性
37、海量订单产生的业务高峰期,如何避免消息的重复消费?
38、你知道如何保障生产端100%消息投递成功吗?
39、微服务下的分布式session该如何管理?
40、阿里二面:filter、interceptor、aspect应如何选择?很多人中招
41、互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里
42、阿里二面:CDN缓存控制原理,看看能不能难住你
43、SpringCloud Alibaba之Nacos多环境多项目管理
44、SpringCloud Alibaba系列之Nacos配置中心玩法
45、SpringCloud Alibaba之Nacos注册中心
46、SpringCloud Plus版本之SpringCloud Alibaba
47、SpringCloud Alibaba之Nacos集群、持久化
48、SpringCloud Alibaba之Nacos共享配置、灰度配置
49、SpringCloud Alibaba之Sentinel工作原理
50、SpringCloud Alibaba之Sentinel流控管理
51、SpringCloud Alibaba之Sentinel降级管理
52、SpringCloud Alibaba之Sentinel热点参数限流
53、SpringCloud Alibaba之Sentinel的API实战
閱讀更多 老顧聊技術 的文章