[Spring Boot] (2) Tour de exploração dos arquivos de configuração do Spring Boot


prefácio

Os arquivos de configuração desempenham um papel importante no desenvolvimento de software, permitindo-nos ajustar e configurar o comportamento do aplicativo sem alterar o código-fonte . Para uma estrutura moderna como o Spring Boot, o arquivo de configuração é a chave para sua flexibilidade e facilidade de uso. Com a configuração adequada, podemos migrar facilmente aplicativos de ambientes de desenvolvimento para ambientes de teste e produção, ao mesmo tempo em que fornecemos configurações específicas para diferentes ambientes de implantação .

Este artigo se aprofundará em todos os aspectos dos arquivos de configuração do Spring Boot, desde a sintaxe básica até as configurações em diferentes ambientes, para ajudar os leitores a compreender totalmente e aplicar com flexibilidade o conhecimento relevante dos arquivos de configuração. A seguir, percorrerei os diferentes aspectos do arquivo de configuração, vamos embarcar nesta jornada de descoberta sobre a configuração do Spring Boot.

1. A função do arquivo de configuração

Um arquivo de configuração é uma forma de externalizar a configuração para armazenar informações como parâmetros, opções e configurações de um aplicativo. As principais funções do arquivo de configuração são as seguintes :

  1. Flexibilidade e configurabilidade : Ao separar as informações de configuração do código, os aplicativos se tornam mais flexíveis e configuráveis . Isso significa que podemos ajustar o comportamento do aplicativo para atender às diferentes necessidades de negócios e requisitos ambientais, simplesmente modificando os arquivos de configuração sem modificar o código.

  2. Acoplamento reduzido : quando as informações de configuração são externalizadas, as dependências entre os diferentes componentes de uma aplicação são reduzidas . Dessa forma, quando uma determinada configuração precisa ser alterada, apenas o arquivo de configuração precisa ser modificado sem afetar outras partes do código, o que reduz o acoplamento entre os códigos e facilita a manutenção e expansão do código.

  3. Implantação e gerenciamento convenientes : Por meio do arquivo de configuração, podemos separar as configurações do aplicativo do código, de forma que, durante a implantação, apenas o arquivo de configuração precise ser substituído ou atualizado sem recompilar todo o código. Ao mesmo tempo, as configurações em diferentes ambientes podem ser gerenciadas por meio de diferentes arquivos de configuração, simplificando assim a implantação e o gerenciamento de aplicações em diferentes ambientes.

  4. Segurança : Informações confidenciais (como senhas de banco de dados, chaves de API, etc.) geralmente não devem ser codificadas, mas armazenadas em arquivos de configuração. Isso evita a exposição de informações confidenciais em repositórios de código ou aplicativos lançados, melhorando a segurança dos aplicativos.

  5. Internacionalização e localização : Os arquivos de configuração podem ser usados ​​para armazenar texto e informações de localização em diferentes idiomas. Desta forma, o programa aplicativo pode ler o arquivo de configuração correspondente de acordo com o ambiente de idioma do usuário, de forma a atender aos requisitos de internacionalização e localização.

Em segundo lugar, o formato do arquivo de configuração

2.1 Formato do arquivo de configuração do Spring Boot

Spring Boot suporta vários formatos de arquivo de configuração, os mais comuns são propriedades e yml (YAML) . Diferentes formatos são adequados para diferentes cenários, e os desenvolvedores podem escolher o formato do arquivo de configuração que mais lhes convém de acordo com as necessidades reais.

1. formato de propriedades

propriedades é um formato de texto de pares de valores-chave, cada linha contém uma propriedade e o valor correspondente . Seu formato é semelhante a: key=value. No Spring Boot, várias propriedades podem ser configuradas usando o formato de propriedades. Por exemplo:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myusername
spring.datasource.password=mypassword
server.port=8080

2. formato yml (YAML)

YAML é um formato de serialização de dados conciso e fácil de ler, cujo nome completo Yet Another Markup Language, traduzido para o chinês, é "outra linguagem de marcação". Ele缩进 expressa relacionamentos hierárquicos na forma e suporta estruturas de dados como listas e mapas . No Spring Boot, os arquivos de configuração no formato yml geralmente têm o sufixo .ymlou.yaml . Comparado com o formato de propriedades, o formato yml é mais flexível e fácil de escrever. Por exemplo:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: myusername
    password: mypassword
server:
  port: 8080

Em um projeto Spring Boot, os arquivos de configuração em propriedades e formatos yml podem teoricamente ser usados ​​ao mesmo tempo e podem coexistir no mesmo projeto. Quando os arquivos de configuração de propriedades e yml existirem ao mesmo tempo e possuírem os mesmos itens de configuração, a configuração no arquivo de propriedades terá prioridade, ou seja, a configuração com o mesmo nome no arquivo yml será sobrescrita .

  • Este mecanismo de prioridade de configuração permite que os desenvolvedores escolham com mais flexibilidade configurar diferentes parâmetros em propriedades ou formato yml e organizar e gerenciar diferentes tipos de informações de configuração em diferentes arquivos de configuração.
  • Por exemplo, itens de configuração regulares e relativamente simples podem ser colocados em arquivos de propriedades, enquanto itens de configuração complexos e estruturados podem ser colocados em arquivos yml para melhorar a legibilidade e a manutenção.

No entanto, embora teoricamente sejam permitidos arquivos de configuração em ambos os formatos, em projetos práticos geralmente é escolhido um formato de arquivo de configuração unificado. Fazer isso traz os seguintes benefícios:

  1. Manutenção Unificada : Usar um formato de arquivo de configuração unificado reduz custos de manutenção, confusão e erros. Todas as informações de configuração estão concentradas em um mesmo formato, o que é mais fácil para a equipe de desenvolvimento manter e gerenciar de forma unificada.

  2. Taxa de falhas reduzida : O formato de arquivo de configuração unificado evita problemas de conversão e adaptação entre diferentes formatos, reduzindo possíveis erros e falhas.

  3. Legibilidade : Usar um formato de arquivo de configuração unificado pode melhorar a comunicação e o entendimento entre os membros da equipe e reduzir a confusão causada por diferenças de formato.

  4. Padronização : um formato de arquivo de configuração unificado ajuda a formar normas e melhores práticas, melhorando a manutenção e a estabilidade do projeto.

2.2 A diferença entre propriedades e yml

Ao escolher um formato de arquivo de configuração, você pode considerar os seguintes aspectos:

  1. Estrutura gramatical : O formato de propriedades usa uma estrutura simples de pares de valores-chave , que é adequada para cenários de configuração simples. O formato yml usa recuo para representar relacionamentos hierárquicos , que podem mostrar estruturas de configuração complexas com mais clareza e é adequado para lidar com configurações mais complexas.

  2. Legibilidade : O formato yml é mais legível e fácil de manter devido à sua estrutura recuada . Por outro lado, o formato das propriedades pode parecer detalhado e pouco intuitivo quando há muitas configurações ou aninhamentos profundos .

  3. Extensibilidade : O formato yml suporta estruturas de dados mais ricas, como listas e mapas, o que o torna mais flexível ao lidar com configurações complexas . O formato de propriedades só pode representar pares simples de valores-chave .

  4. Restrições de nome de chave : Os nomes de chave no formato de propriedades não podem conter espaços e devem seguir determinadas convenções de nomenclatura . Os nomes das chaves no formato yml podem conter espaços, o que é mais flexível .

No geral, para configurações simples, o formato de propriedades pode ser mais intuitivo e conveniente; para configurações complexas, a legibilidade e flexibilidade do formato yml o tornam uma escolha melhor. Em aplicações práticas, a escolha do formato de arquivo de configuração apropriado é uma decisão importante baseada nas necessidades do projeto e nas preferências da equipe. Spring Boot oferece suporte abrangente para os dois formatos, que podem ser selecionados e utilizados de acordo com a situação real do projeto.

Três, arquivo de configuração de propriedades

3.1 sintaxe básica das propriedades

O arquivo de configuração de propriedades é um formato de texto simples de par de valores-chave, cada linha contém uma propriedade e o valor correspondente, e o sinal de igual "=" é usado para conectar o nome da chave e o valor da chave. A sintaxe básica é a seguinte:

# 配置项目的端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root

PS: Use "#" no arquivo de configuração para adicionar informações de comentários.

3.2 Leitura de arquivos de configuração

@Valuee @ConfigurationPropertiessão duas maneiras comuns de ler valores de configuração no Spring Boot, e ambas podem ser usadas para vincular valores de propriedades em arquivos de configuração a objetos Java para facilitar o uso no código.

1. @ValueNotas:

@ValueÉ uma anotação no framework Spring, que pode ser usada diretamente para injetar o valor do atributo no arquivo de configuração no atributo no Spring Bean . Usando anotações nas propriedades @Valuee especificando o nome da chave da propriedade (como ${key}), o Spring Boot lerá automaticamente o valor correspondente do arquivo de configuração e o atribuirá à propriedade.

Suponha que temos um application.propertiesarquivo de configuração com o seguinte conteúdo:

app.name=My Application
app.version=1.0.0

Então podemos usar anotações no Spring Bean @Valuepara ler estes itens de configuração:

@Component
public class MyBean {
    
    
    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    @PostConstruct
    public void doPostConstruct(){
    
    
        System.out.println("appName: " + appName);
        System.out.println("appVersion: " + appVersion);
    }
}

O código acima representa a criação de um MyBeanque utiliza @Valueanotações para ler os valores dos atributos no arquivo de configuração e @PostConstructimprime os valores dos atributos lidos no método marcado pelas anotações. Execute a classe de inicialização e você verá que o console imprime informações de configuração relevantes:

2. @ConfigurationPropertiesComentários:

@ConfigurationPropertiesÉ uma anotação fornecida pelo Spring Boot dedicada à leitura das propriedades do arquivo de configuração. Ele pode vincular o valor do atributo no arquivo de configuração ao atributo correspondente no objeto Java e fornecer uma função de ligação de item de configuração mais flexível . Deve-se observar que @ConfigurationPropertiesao usar anotações, um prefixparâmetro precisa ser fornecido para especificar o prefixo do atributo no arquivo de configuração para correspondência de atributos.

Suponha que temos um application.propertiesarquivo de configuração com o seguinte conteúdo:

app.name=My Application
app.version=1.0.0

Então podemos criar uma classe Java e usar @ConfigurationPropertiesanotações para ler estes itens de configuração:

@Component
@Setter
@ConfigurationProperties("app")
public class AppConfig {
    
    
    private String name;
    private String version;

    @PostConstruct
    public void init() {
    
    
        System.out.println("appName: " + name);
        System.out.println("appVersion: " + version);
    }
}

No exemplo acima, @ConfigurationProperties(prefix = "app")o prefixo do atributo no arquivo de configuração é especificado como "app", e o Spring Boot lerá automaticamente os itens de configuração prefixados com "app" e atribuirá o valor correspondente ao atributo correspondente da classe AppConfig.

注意,此时一定要提供 Setter 方法才行,此处我使用的是Lombok工具中的 @Setter 注解为我提供 Setter 方法。

Execute a classe de inicialização:

A diferença entre os dois:

  • @ValueAs anotações são usadas para injetar diretamente um valor de propriedade em um arquivo de configuração em uma propriedade do Spring Bean. Adequado para leitura simples de itens de configuração.
  • @ConfigurationPropertiesAs anotações são usadas para vincular vários valores de atributos em um arquivo de configuração a vários atributos em um objeto Java, fornecendo uma função de ligação de item de configuração mais flexível e suportando a configuração de estruturas de dados complexas. Adequado para leitura complexa de itens de configuração.

Resumindo, @Valuesão @ConfigurationPropertiesformas comuns de ler valores de configuração, a forma de escolher depende das necessidades reais e da complexidade dos itens de configuração.

3.3 Análise das vantagens e desvantagens dos imóveis

3.3 Análise das vantagens e desvantagens dos imóveis:

vantagem:

  1. Simples e intuitivo : o arquivo de configuração de propriedades adota um formato simples de par de valores-chave, que é fácil de escrever e ler e é muito intuitivo e conveniente para itens de configuração simples.

  2. Amplo suporte : O formato de propriedades é um formato de arquivo de configuração comum compatível com a maioria das linguagens de programação e estruturas, portanto, é adequado para vários cenários de aplicação.

  3. Configuração clara : como o arquivo de configuração de propriedades expressa a correspondência entre itens de configuração e valores de configuração na forma de pares de valores-chave, a configuração é clara e fácil de manter e modificar.

  4. Leitura rápida : O formato do arquivo de configuração de propriedades é simples e a velocidade de leitura é rápida, o que é mais eficiente para obter rapidamente informações de configuração.

deficiência:

  1. Falta de estrutura : o arquivo de configuração de propriedades suporta apenas estruturas simples de pares de valores-chave e não pode representar estruturas de dados complexas, como objetos aninhados e listas. Quando o item de configuração é mais complexo, pode não ser suficientemente flexível.

  2. Restrição de nome de chave : Os nomes de chave no arquivo de configuração de propriedades não podem conter caracteres especiais, como espaços, e devem seguir certas convenções de nomenclatura, o que não é flexível o suficiente.

  3. Valores multilinhas não são suportados : os valores no arquivo de configuração de propriedades devem ser escritos em uma linha e a representação cruzada de valores de configuração não é suportada, o que pode não ser conveniente ao configurar texto longo.

Resumindo, o arquivo de configuração de propriedades é um formato de configuração simples e prático, adequado para cenários de configuração simples. Porém, o formato das propriedades apresenta algumas desvantagens óbvias, como falta de estrutura, restrições de nomes de chaves, redundância, etc., o que pode limitar seu uso quando o item de configuração for mais complexo. No desenvolvimento real, de acordo com a complexidade e os requisitos de configuração do projeto, você pode escolher um formato de arquivo de configuração mais flexível, como o formato yml, para atender a requisitos de configuração mais complexos.

4. Descrição do arquivo de configuração yml

4.1 sintaxe básica do yml

O formato yml usa recuo para indicar relacionamentos hierárquicos, oferece suporte a estruturas de dados como listas e mapas e recursos como comentários e texto multilinha. A sintaxe básica é a seguinte:

  1. par de valores-chave:
key1: value1
key2: value2
  1. lista:
key3:
  - item1
  - item2
  1. Mapeamentos aninhados:
key4:
  subkey1: value1
  subkey2: value2
  1. Texto multilinha:
key5: |
  This is a multiline text.
  It can span multiple lines without escaping special characters.
  1. Notas:
# This is a comment.
key6: value6  # This is another comment.

yml 配置文件的读取和 properties 配置文件读取方法一致。

4.2 casos de uso de yml

Suponha que temos um application.ymlarquivo de configuração com o seguinte conteúdo:

app:
  name: My Application
  version: 1.0.0
  author: 张三

server:
  port: 8080

database:
  url: jdbc:mysql://localhost:3306/mydb
  username: myusername
  password: mypassword

No caso acima, o arquivo de configuração no formato yml mostra uma variedade de métodos de configuração comumente usados. appA seção é um mapa que contém atributos como nome, versão e autor do aplicativo. serverA seção é um par simples de chave-valor que especifica a porta de lançamento do projeto. databaseA seção é um mapa aninhado que contém propriedades relacionadas à conexão com o banco de dados.

4.3 Análise das vantagens e desvantagens do yml

vantagem:

  1. Flexível e fácil de ler : O formato yml usa recuo para representar relacionamentos hierárquicos, facilitando a leitura e a escrita. Recursos como listas, mapas e texto multilinha são suportados, o que pode exibir estruturas de configuração complexas com mais clareza e melhorar a legibilidade e manutenção dos arquivos de configuração.

  2. Suporte para estruturas de dados complexas : O formato yml oferece suporte a listas e mapas aninhados, que podem representar estruturas de dados mais complexas e são adequados para processar itens de configuração complexos.

  3. Comentários de suporte : o formato yml permite adicionar comentários e informações explicativas de comentários podem ser adicionadas ao arquivo de configuração para facilitar a compreensão e explicação do significado dos itens de configuração.

  4. Não limitado por nomes de chaves : nomes de chaves no formato yml podem conter caracteres especiais, como espaços, e não precisam seguir convenções de nomenclatura específicas, o que é mais flexível.

deficiência:

  1. Custo de aprendizagem : Em comparação com o formato de propriedades, a sintaxe do formato yml pode ser mais complicada e leva algum tempo para os iniciantes se adaptarem e aprenderem.

  2. Propenso a erros : como o formato yml depende do recuo para representar o relacionamento hierárquico, se o recuo estiver incorreto, poderá causar erros de análise de configuração, aumentando a possibilidade de erros.

Resumindo, o arquivo de configuração yml é um formato de configuração flexível e fácil de ler, adequado para cenários de configuração complexos. Tem as vantagens de ser flexível e fácil de ler, suportar estruturas de dados complexas, suportar anotações e não ser restringido por nomes de chaves, o que pode melhorar a legibilidade e a manutenção dos arquivos de configuração. No entanto, o formato yml também apresenta algumas desvantagens, como alto custo de aprendizado e tendência a erros, que precisam ser desenvolvidos

5. Defina arquivos de configuração em diferentes ambientes

No Spring Boot, diferentes ambientes podem ser distinguidos por meio de diferentes arquivos de configuração, como ambiente de desenvolvimento, ambiente de teste e ambiente de produção. Spring Boot carregará application.yml(ou application.properties) como o arquivo de configuração principal por padrão, mas diferentes arquivos de configuração podem ser carregados de acordo com diferentes ambientes. Através das regras de nomenclatura, o Spring Boot pode identificar e carregar automaticamente os arquivos de configuração do ambiente correspondentes.

No Spring Boot, a configuração de arquivos de configuração yml em diferentes ambientes pode ser obtida por meio de regras de nomenclatura. A seguir estão as regras de nomenclatura de arquivos de configuração para ambientes de desenvolvimento, teste e produção.
Arquivo de configuração do ambiente de desenvolvimento:application-{profile}.yml

  • Exemplo de nomenclatura:application-dev.yml
  • {profile}A parte é o nome do ambiente, por exemplo: dev, development, etc.

Arquivo de configuração do ambiente de teste:application-{profile}.yml

  • Exemplo de nomenclatura:application-test.yml
  • {profile}A parte é o nome do ambiente, por exemplo: teste, testes, etc.

Arquivo de configuração do ambiente de produção:application-{profile}.yml

  • Exemplo de nomenclatura:application-prod.yml
  • {profile}A parte é o nome do ambiente, por exemplo: prod, produção, etc.

De acordo com as regras de nomenclatura acima, quando o aplicativo Spring Boot é iniciado, a spring.profiles.activeconfiguração do ambiente atualmente ativo pode ser especificada definindo a propriedade. Por exemplo, setting spring.profiles.active=devcarregará application-dev.ymla configuração de e setting spring.profiles.active=prodcarregará application-prod.ymla configuração de .

Suponha que tenhamos três ambientes: um ambiente de desenvolvimento, um ambiente de teste e um ambiente de produção. Podemos criar o arquivo de configuração correspondente da seguinte forma :

  1. application-dev.yml: arquivo de configuração do ambiente de desenvolvimento
  2. application-test.yml: arquivo de configuração do ambiente de teste
  3. application-prod.yml: arquivo de configuração do ambiente de produção

Nestes arquivos de configuração, os itens de configuração correspondentes podem ser definidos para diferentes ambientes. Por exemplo:

application-dev.yml

app:
  name: My Dev Application

server:
  port: 8080

debug: true

application-test.yml

app:
  name: My Test Application

server:
  port: 8081

debug: true

application-prod.yml

app:
  name: My Production Application

server:
  port: 8082

debug: false

Arquivo de configuração principal application.yml:

app:
  name: My Application
  version: 1.0.0

spring:
  profiles:
    default: dev

Desta forma, ao iniciar uma aplicação Spring Boot em um ambiente diferente, o Spring Boot carregará automaticamente spring.profiles.activeo arquivo de configuração correspondente de acordo com o valor de . Por exemplo, quando definido como , a configuração em devserá carregada ; quando definido como , a configuração em será carregada ; quando definido como , a configuração em será carregada .application-dev.ymltestapplication-test.ymlprodapplication- prod.yml

Ao implantar e executar o aplicativo, você só precisa modificar spring.profiles.activeo valor de para o nome do ambiente correspondente e pode usar a configuração correspondente. Este método torna a configuração do programa aplicativo mais flexível e conveniente para alternar em diferentes ambientes.

Acho que você gosta

Origin blog.csdn.net/qq_61635026/article/details/132124482
Recomendado
Clasificación