项目场景:
关于nacos同一命名空间下拉取多个配置文件:
例如:一个类中用到不同配置文件中的属性值。
问题描述
只能拉取到第一个配置文件中的值:
最开始项目中的bootstrap.properties的代码如下
#dev
spring.application.name=gulimall-order
spring.cloud.nacos.server-addr=xxx:8848
#注册与发现
spring.cloud.nacos.discovery.namespace=bffcbbe4-b4e9-4f5f-95ad-d28dd6ee2014
spring.cloud.nacos.discovery.group=dev
#配置
spring.cloud.nacos.config.namespace=bffcbbe4-b4e9-4f5f-95ad-d28dd6ee2014
#指定拉取的配置文件类型,服务上用的是yaml,针对nacos上data-id是gulimall-order的情况
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.extension-configs[0].data-id=gulimall-order
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=gulimall-order2
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
类中的代码如下:
@RestController
@RequestMapping("order/order")
@RefreshScope
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private ProductFeginSerice productFeginSerice;
@Value("${order.name}")
private String name;
@Value("${order.id}")
private String id;
/**
* 列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = orderService.queryPage(params);
//testFegin
R r = productFeginSerice.feginSave();
return R.ok().put("page", page).put("feign", r.get("product")).put("订单名:",name).put("订单id:",id);
}
虽然nacos里分组都是dev,但项目启动的时候就会导致拉取不到gulimall-order2的信息,报@Value(“${order.id}”)找不到
解决方案:
找了网上的案例,试着改了下data-id,加了后缀名,bootstrap.properties的代码如下:
#dev
spring.application.name=gulimall-order
spring.cloud.nacos.server-addr=xxx:8848
#注册与发现
spring.cloud.nacos.discovery.namespace=bffcbbe4-b4e9-4f5f-95ad-d28dd6ee2014
spring.cloud.nacos.discovery.group=dev
#配置
spring.cloud.nacos.config.namespace=bffcbbe4-b4e9-4f5f-95ad-d28dd6ee2014
#命名空间下拉取多个配置文件,针对nacos上data-id是gulimall-order.yml的情况
spring.cloud.nacos.config.extension-configs[0].data-id=gulimall-order.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=gulimall-order.yml
spring.cloud.nacos.config.extension-configs[1].group=pro
spring.cloud.nacos.config.extension-configs[1].refresh=true
这样的话spring.cloud.nacos.config.file-extension=yaml和spring.cloud.nacos.config.group=dev都不用指定了,会根据命名空间 + data-id + group 去拉取不同的配置文件,最终项目成功启动,nacos中两个配置文件中的order.name 与 order.id都能取到了,所以最终还是用法不对,取data-id尽量按照官方的来。
nacos截图如下:
页面访问效果如下: