Gerenciamento Centralizado de Configurações com Nacos e Spring Cloud Alibaba

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.

Tags: Nacos spring-cloud-alibaba microservices java configuration-management

Publicado em 7-11 22:31