开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门:dubbo.properties&属性加载顺序】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/624/detail/9465
dubbo.properties&属性加载顺序
内容介绍:
一、配置属性规则
二、测试加载顺序
一、配置属性规则
一、配置属性规则
Dubbo 配置文件,以前是写一段 Spring 配置文件,配 dubbo 的一些信息,包括配置文件中可写非常多的 dubbo 标签,标签可参照 dubbo 的官方文档,在 XML 配置里,有介绍每一个标签的作用,在左侧 schema 配置参考手册中,有每一个标签详细的解释,包括标签里可写哪些属性,每一个属性功能;
例如:dubbo:service 是用来服务提供者暴露服务配置的。
能配置哪些标签与 Springboot 整合时 application properties 中配置的都与标签是一一对应的,前面是转化来的标签名
例如:dubbo:application 会转化成 dubbo.application 加上属性名。
所有标签属性均可在这一一配置,想要生效这些属性配置,dubbo 规定了三种规则,在属性配置中,dubbo 的覆盖策略,属性可在应用启动时通过 Java 的-d 来添加虚拟级参数的方式来改变属性的值;也可以配在 XML 文件中,以前用的是 XML 文件与 Springboot 整合就与 application properties 文件是一样的,可以配在 XML 或者 application properties 中;
还可以写一个 dubbo properties,dubbo properties 文件就是 dubbo 的整个公共配置信息,如果很多人,很多配置的都一样,可以抽取成一个公共的配置信息,也可在启动时加载,但是有优先顺序,若虚拟级参数有传入那么 Dubbo.protocol.port 为中心;
若没有传入,则以 dubbo.xml 配置或与 springboot 整合的 application properties 为优先;若 dubbo.xml 也没有传,则以 dubbo.properties 公共配置优先。
二、测试加载顺序
接下来测试效果,在 user-service 里,除了写 application properties,也就是说普通的项目里,application properties 就是 xml 文件,因此在一个里面演示,还可以写上一个叫 dubbo properties,这里面主要是一些公共配置.
以 dubbo.protocol.port 端口号为例,
在 properties 里可以写的内容,就类似 dubbo.application.name.(X.X.X.)这些配置即 XML 配置的标签名,加属性名,用点分隔。
和 application properties 的配置生成规则是一样的,比如:dubbo:application:name 将生成 dubbo.application.name。
在 dubbo 的配置文件中,配上一个端口号,以端口号为例测试
在 dubbo 的公共配置文件中,配上端口为20882,
即dubbo.protocol.port=20882
,在application properties 中端口用20881,即 dubbo.protocol.port=20881
,
接下来启动服务提供者,由于要测试哪个配置生效,因此先启动 RunConfigurations,启动时先配置一下 User-service-provider,在参数位置配置第一个虚拟级参数,虚拟级参数为-d,固定写法为-Dubbo.protocol.port=20880,相当于在启动服务提供者时,虚拟级参数指定的端口是20880, application properties 即普通项目里的 XML 配置,指的是20881;
那么 dubbo 的公共配置 properties 指的是20882,那么哪个能生效呢?
运行一下
url 地址为20880,
包括在管理配置台看服务提供者地址,也为20880
说明这个启动了,虚拟级参数有效了。
下面我们不带虚拟级参数进行运行,依旧是 user-service 提供者,把虚拟级参数删掉,即虚拟级参数不配置,只剩下 XML 即 application properties,还剩下 dubbo的配置,按照优先级规定,一定是 application properties 生效,这种情况下,测试结果是20881,运行一下
端口即为20881
监控控制台也为20881
若 application properties 中 dubbo.protocol.port 没有配置,那么就会用公共的 dubbo properties,这个配置叫20882,此时20882是有效的,运行一下
注册端口为20882
管理控制台也为20882
以上是测试的加载顺序,如文档所说,优先顺序是按照虚拟级参数,XML 配置,公共的 dubbo properties 配置,以后在编程时,比如注册中心的地址、应用的名字、公共的配置都可以放在 dubbo properties 中,在 XML 以及 application properties 里,只写额外需要改变的配置,
如果想临时改变,可以在启动应用时通过传入虚拟级参数而不需要再来改变其他配置。