Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
使用 Spring Cloud Alibaba 可以方便的把 Nacos 作为注册中心,具体配制可以参考官方文档:
Spring Cloud Alibaba Nacos Config
Nacos Config Example
本文主要介绍如何读取多个配制文件,官方文档没有提及
通过配制 spring.cloud.nacos.config.prefix 可以指定配制文件的前缀,也可以不指定,默认使用 spring.application.name, 下面我们统称为 prefix
Spring Cloud Alibaba Nacos Config 的官方文档中没有提及如何读取多个配制文件,实际上会默认读取:
(${sprefix}.properties) 和 (${sprefix}-${profile}.properties) 这两个文件(只指定一个profile的情况下)
而 spring.profiles.active 是可以指定多个 profile 的,用逗号隔开就行,这样的话实际读取的就是profile数量+1 个配制文件了
实际中可能有这样的需求: 有A,B两个(更多)服务,它们有些配制是一样的,我们希望把这些一样的配制提取到一个公共配制中,那我们可以这样玩:
因为是两个不同的服务,所以 spring.application.name 我们希望是不同的名称, 那么这个时候我们就需要指定 spring.cloud.nacos.config.prefix 了,大概是这样子:
服务A:
spring.application.name=serviceA
spring.cloud.nacos.config.prefix=service
服务B:
spring.application.name=serviceB
spring.cloud.nacos.config.prefix=service
服务A和服务B使用相同的 spring.cloud.nacos.config.prefix , 这个时候我们需要指定 profile , 大概是这个样子:
服务A:
spring.application.name=serviceA
spring.profiles.active=serviceA
spring.cloud.nacos.config.prefix=service
服务B:
spring.application.name=serviceB
spring.profiles.active=serviceB
spring.cloud.nacos.config.prefix=service
那么我们的配制文件是这样子:
- service.properties #全局配制
- service-serviceA.properties #serviceA的配制
- service-serviceB.properties #serviceB 的配制
另一种玩法: 充分利用多个 profile 的特性:
服务A:
spring.application.name=serviceA
spring.profiles.active=serviceA, public
spring.cloud.nacos.config.prefix=service
服务B:
spring.application.name=serviceB
spring.profiles.active=serviceB, public
spring.cloud.nacos.config.prefix=service
这个时候我们可以不使用 service.properties 文件,而变成:
- service-public.properties #全局配制
- service-serviceA.properties #serviceA的配制
- service-serviceB.properties #serviceB 的配制