O Nacos Config é um componente essencial do ecossistema Spring Cloud Alibaba, projetado para centralizar e gerenciar dinamicamente as configurações de microserviços. Ele elimina a necessidade de reiniciar aplicações para aplicar alterações de parâmetros e permite um controle refinado sobre diferentes ambientes.
1. Integração de Dependências
Para habilitar o suporte ao Nacos como provedor de configuração, adicione o starter correspondente ao seu arquivo pom.xml:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. Configuração do Cliente
Diferente das configurações convencionais, as definições do Nacos devem residir no arquivo bootstrap.yml (ou bootstrap.properties). Isso ocorre porque as configurações precisam ser carregadas durante a fase inicial do contexto do Spring.
server:
port: 8090
spring:
application:
name: servico-pagamento
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
prefix: servico-pagamento
group: PROD_GROUP
namespace: b2d1-4e12-89b5-f48c
3. Mapeamento de Atributos e Atualização Dinâmica
Para injetar as propriedades do Nacos no código Java e garantir que elas sejam atualizadas em tempo real sem o reinício do nó, utilizamos a anotação @RefreshScope.
package com.projeto.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Data
@Component
@RefreshScope
public class ParametrosSistema {
@Value("${sistema.timeout:5000}")
private Long timeoutConexao;
@Value("${sistema.versao}")
private String versaoApp;
@Value("${sistema.autor}")
private String nomeAutor;
}
Para expor esses dados via API e validar a integração:
package com.projeto.controller;
import com.projeto.config.ParametrosSistema;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigController {
private final ParametrosSistema config;
public ConfigController(ParametrosSistema config) {
this.config = config;
}
@GetMapping("/config/status")
public String getStatus() {
return String.format("Versão: %s | Timeout: %d",
config.getVersaoApp(), config.getTimeoutConexao());
}
}
4. Lógica de Identificação de Configuração (DataId)
O Nacos localiza o arquivo de configuração correto seguindo uma hierarquia baseada no DataId. A estrutura padrão segue este padrão:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix: Por padrão é o nome da aplicação, mas pode ser customizado.
- spring.profiles.active: O perfil ativo (ex: dev, test). Se vazio, o hífen também é omitido.
- file-extension: O formato do arquivo (yaml ou properties).
5. Trabalhando com Múltiplos Arquivos e Compartilhamento
Em cenários complexos, uma aplicação pode precisar consumir múltiplos arquivos de configuração (ex: um para banco de dados, outro para segurança).
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
# Configurações Adicionais
extension-configs:
- dataId: modulo-seguranca.yaml
group: SECURITY_GROUP
refresh: true
- dataId: modulo-comum.yaml
group: DEFAULT_GROUP
refresh: false
# Configurações Compartilhadas
shared-configs:
- dataId: redis-shared.yaml
refresh: true
6. Divisão de Responsabilidades
Para uma arquitetura limpa, recomenda-se a seguinte divisão:
- bootstrap.yml (Local): Contém metadados de conectividade, como o endereço do servidor Nacos, nome da aplicação, Namespace e Group.
- Configuração Remota (Nacos Server): Armazena dados voláteis ou sensíveis, como strings de conexão JDBC, chaves de API, níveis de log e parâmetros de regras de negócio.