《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
log.trace(“log.trace”);//跟踪
log.debug(“log.debug”);//调试
log.info(“log.info”);//常规信息
log.warn(“log.warn”);//警告
log.error(“log.error”);//错误信息
return "log level is "+logLevel;
}
……
}
其中,@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化),Controller编写好以后,启动配置中心服务,然后进行访问测试。,打开浏览器直接在地址栏输入http://localhost:8081/provider/doGetLogLevel,检测输出结果是否为我们配置中配置的信息,如图所示。
说明,假如对配置的信息访问不到,请检测项目配置文件的名字是否为bootstrap.yml,检查配置文件中spring.application.name属性的值是否与配置中心的data-id名相同,还有你读取的配置信息缩进以及空格写的格式是否正确.
修改Nacos的日志级别配置并重新重新发布,如图所示:
刷新浏览器url,检测其配置输出。
-
配置中心一般都会配置什么内容?(可能会经常变化的配置信息,例如连接池,日志、线程池、限流熔断规则)
-
什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册地址,配置中心)
-
项目中为什么要定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
-
Nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?(可以从内存,客户端获取了配置中心的配置信息以后,会将配置信息在本地内存中存储一份.)
-
微服务应用中我们的客户端如何获取配置中心的信息?(为了考虑性能我们的服务一般首先会从内存读取配置信息,同时我们的微服务还可以定时向nacos配置中心发请求拉取(pull)更新的配置信息,但是在一定时间间隔内还可能会出现不一致的配置,所以nacos服务端而言,当配置变化时,会通知客户端然后更新客户端.)
-
微服务应用中客户端如何感知配置中心数据变化?(当数据发生变化时,nacos找到它维护的客户端,然后通知客户端去获取更新的数据,客户端获取数据以后更新本地内存,并在下次访问资源时,刷新@Value注解描述的属性值,但是需要借助@RefreshScope注解对属性所在的类进行描述)
-
服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,配置文件名字bootstrap.yml,配置中心的dataId名字是否正确,分组是否正确,配置的名字是否正确,缩进关系是否正确,假如是动态发布,类上是否有@RefreshScope注解)
-
你项目中使用的日志规范是什么?(SLF4J)
-
你了解项目中的日志级别吗?(debug,info,error,…,可以基于日志级别控制日志的输出)
=====================================================================
Nacos 配置管理模型由三部分构成,如图所示:
其中:
-
Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境。
-
Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组。
-
Service/DataId:某⼀个服务或配置集,一般对应一个配置文件。
Nacos中的命名空间一般用于配置隔离,这种命名空间的定义一般会按照环境(开发,生产等环境)进行设计和实现.我们默认创建的配置都存储到了public命名空间,如图所示:
创建新的开发环境并定义其配置,然后从开发环境的配置中读取配置信息,该如何实现呢?
第一步:创建新命名空间,如图所示:
命名空间成功创建以后,会在如下列表进行呈现。
在指定命名空间下添加配置,也可以直接取配置列表中克隆,例如:
克隆成功以后,我们会发现在指定的命名空间中有了我们克隆的配置,如图所示:
此时我们修改dev命名空间中Data Id的sca-provider配置,如图所示:
修改项目module中的配置文件bootstrap.yml,添加如下配置,关键代码如下:
spring:
cloud:
nacos:
config:
namespace: 6058fd3f-0d4d-44f2-85d6-5fc7d2348046
……
其中,namespace后面的字符串为命名空间的id,可直接从命名空间列表中进行拷贝.
重启服务,继续刷新http://localhost:8081/config/doGetLogLevel地址。检测输出,看看输出的内容是什么,是否为dev命名空间下配置的内容,如图所示:
我们还可以创建生产环境,依次类推进行设计和实现即可。
当我们在指定命名空间下,按环境或服务做好了配置以后,有时还需要基于服务做分组配置,例如,一个服务在不同时间节点(节假日,活动等)切换不同的配置,可以在新建配置时指定分组名称,如图所示:
配置发布以后,修改boostrap.yml配置类,在其内部指定我们刚刚创建的分组,代码如下:
server:
port: 8070
spring:
application:
name: nacos-config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
group: DEV_GROUP_51 # Group, default is DEFAULT_GROUP
file-extension: yml # Configure the data format of the content, default to properties
namespace: 5c27fe4a-1141-4836-a14e-cbac77fb2130
在NacosConfigController类中添加属性和方法用于获取和输出DEV_GROUP_51配置中设置的线程数,代码如下:
@Value(“${server.tomcat.threads.max:200}”)
private Integer maxThread;
@RequestMapping(“/provider/doGetMaxThread”)
public String doGetMaxThread(){
return "server.threads.max is "+maxThread;
}
然后重启服务,进行测试,检测内容输出,如图所示:
当同一个namespace的多个配置文件中都有相同配置时,可以对这些配置进行提取,然后存储到nacos配置中心的一个或多个指定配置文件,哪个微服务需要,就在服务的配置中设置读取即可。例如:
第一步:在nacos中创建一个共享配置文件,例如:
第二步:在指定的微服务配置文件(bootstrap.yml)中设置对共享配置文件的读取,例如:
见红色区域内容。
spring:
application:
name: nacos-config
cloud:
nacos:
config:
server-addr: localhost:8848
命名空间
namespace: 83ed55a5-1dd9-4b84-a5fe-a734e4a6ec6d
分组名
group: DEFAULT_GROUP
配置中心文件扩展名
file-extension: yml
共享配置
shared-configs[0]:
data-id: app-public-dev.yml
group: DEFAULT_GROUP
refresh: true #默认false
第三步:在指定的业务类中读取和应用共享配置即可,例如:
@Value(“${page.pageSize:10}”)
private Integer pageSize;
@GetMapping(“/provider/doGetPageSize”)
public String doGetPageSize(){
//return String.format()
return "page size is "+pageSize;
}
第四步:启动服务进行访问测试。
-
Nacos配置管理模型的背景?(环境不同配置不同)
-
Nacos配置中的管理模型是怎样的?(namespace,group,service/data-id)
-
Nacos客户端(微服务)是否可以读取共享配置?(可以)
=====================================================================
-
配置中心的选型。(市场活跃度、稳定性、性能、易用)
-
Nacos配置中心基本应用。(新建,修改、删除配置以后,在Nacos客户端应用配置)
-
配置管理模型应用。(namespace,group,service/dataId)
-
Nacos配置变更的动态感知。(底层原理分析)
最后的话
无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
部分截图:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
os配置中心基本应用。(新建,修改、删除配置以后,在Nacos客户端应用配置)
-
配置管理模型应用。(namespace,group,service/dataId)
-
Nacos配置变更的动态感知。(底层原理分析)
最后的话
无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
部分截图:
[外链图片转存中…(img-wRCCg84M-1714373965646)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!