O Spring Boot fornece dois arquivos de configuração comumente usados, a saber, o arquivo de propriedades e o arquivo YML. Sua função é modificar o valor padrão da configuração automática de inicialização da mola. Comparados com os arquivos de propriedades, os arquivos YML são mais jovens e têm muitas armadilhas. Pode -se dizer que Xiao ele consegue e falha Xiao ele. A YML determina a relação hierarquia através de espaços, que é uma estrutura de arquivo de configuração e clara, mas também destruirá a relação hierarquia devido a espaços insignificantes. Este capítulo se concentra na sintaxe do YML e na obtenção de valores dos arquivos de configuração. O que você está esperando? Venha e estude rapidamente!
Tecnologia: YAML, Sintaxe Propriedades, Uso de ConfigurationProperties e Anotações de Valor, Uso de Arquivos de Configuração Os espaços reservados
NOTA: Este capítulo se concentra na sintaxe do YAML e no uso de anotações de configuração. Por favor, vá para o GitHub para teste de código e código completo. Amigos que gostam pode clicar em uma estrela.
Código fonte: https://github.com/itdragonblog/daydayup/tree/master/springboot/spring-boot-yml
Estrutura do diretório do artigo:
1. Introdução ao YAML
YML é um arquivo na linguagem YAML (YAML não é marcada), que é centrada em dados e mais adequada para arquivos de configuração do que JSON, XML, etc.
Comparado com XML, o YML possui um código menos estruturado, tornando os dados mais diretos e claros rapidamente.
E quanto ao YML e JSON? Ninguém é bom ou ruim, o certo é o melhor. A sintaxe do YML é elegante que o JSON, com mais anotações padrão, e é adequado para arquivos de configuração. Como formato de troca de máquina, o JSON é mais forte que o YML e é mais adequado para troca de dados para chamadas de API.
1) Sintaxe YAML
Controle relacionamentos hierárquicos pelo grau de indentação de espaços. O número de espaços não é importante, desde que os espaços à esquerda estejam alinhados, eles são considerados o mesmo nível. Observe que as guias não podem ser usadas em vez de espaços. E case sensível. Ele suporta três estruturas de dados: valor literal, objeto e matriz e também suporta estruturas compostas.
Valor literal: string, tipo booleano, valor numérico, data. As cordas não são citadas por padrão, e aspas únicas escaparão de caracteres especiais. O formato de data suporta aaaa/mm/dd hh: mm: ss
Objeto: consiste em pares de valor-chave, dados na forma de chave: (espaço) valor. Os espaços após o cólon são necessários. Cada conjunto de pares de valor-chave ocupa uma linha e o grau de indentação deve ser consistente. Você também pode usar o método de escrita em linha: {k1: v1, .... kn: vn}
Array: consiste em dados com uma forma de valor (espaço). Os espaços atrás da linha horizontal curta são necessários. Cada conjunto de dados ocupa uma linha e o grau de indentação deve ser consistente. Você também pode usar o método de escrita em linha: [1,2, ... n]
Estrutura composta: qualquer combinação das três estruturas de dados acima
Ii) Aplicação de YAML
Crie um arquivo de configuração global de inicialização da primavera Application.yml e configure os parâmetros da propriedade. Existem principalmente cordas, cordas com caracteres especiais, tipos booleanos, valores, coleções, coleções em linha, objetos em linha e objetos de coleção.
YAML: STR: String pode ser sem citações SpecialStr: "Citações duplas diretamente em saída /n caracteres especiais" SpecialStr2: 'Single Quotes pode escapar /n Bandeira dos caracteres especiais: false num: 666 dnum: 88.88 Lista: - um - dois - dois conjuntos: [1,2,3] mapa: {k1: v1, k2: V2: V2}: [1,2,3]: {{k1: v1, k2: V2: V2} V2}: [1,2,3]. Salário Itdragonblog: 18888.88Crie a classe de entidade Yamlentity.java Obtenha o valor da propriedade no arquivo de configuração, obtenha o valor especificado no arquivo de configuração anotando @configurationproperties e injete -o na classe de entidade. Continue analisando seus métodos de teste específicos e o princípio de obter valores!
importar org.springframework.boot.context.properties.configurationproperties; importar org.springframework.tereotype.component; importar java.util.list; spaesxs spaesx.tingil), que é o sinaTAs, o que é o sinaTAs, o que é o que é o que é o que é um Valor * 2. O número de espaços no lado esquerdo de cada parâmetro de linha determina o nível do parâmetro e não entra aleatoriamente. */@Componente@ConfigurationProperties (prefix = "yaml") public classe Yamlentity {// Valor literal, string, booleano, String privada numérica; // string normal string private SpecialStr; // Escape String especial String privada string SpecialStr2; // String especial string Sinalizadora booleana privada; // tipo de inteiro privado do tipo booleano; // Dnum duplo privado inteiro; // Decimal // Array, listar e definir, duas maneiras de escrever: o primeiro: - valor espacial, cada valor ocupa uma linha e precisa ser recuado e alinhado; o segundo: [1,2, ... n] Lista de redação privada de redação <BEAT>; // Listar conjunto repetido conjunto privado <ject> set; // o conjunto não pode ser repetido Set // Map and Entity Classes, duas maneiras de escrever: o primeiro valor: o valor do espaço, cada valor ocupa uma linha e precisa ser recuada e alinhada; o segundo: {key: value, ...} em linha gravação mapa privado <string, objeto> map; // mapa KV Private List <Position> Posições; // estrutura de composto, objeto de coleta // omita getter, setter, tostring métodos}3) Resumo da YML
1. A string pode ficar sem cotações. Se forem adicionadas cotações duplas, caracteres especiais serão emitidos. Se não forem adicionadas cotações únicas, caracteres especiais serão escapados;
2. Para o tipo de matriz, deve haver espaços atrás de linhas horizontais curtas; Para o tipo de objeto, deve haver espaços atrás do cólon;
3. A YAML controla as relações hierárquicas com base no grau de indentação espacial, mas a tecla TAB não pode ser usada em vez de espaços, e é sensível ao caso;
4. Como fazer um falha de programador? Adicione alguns espaços ao arquivo YML! (Prato <)
2. Introdução às propriedades
Todos costumam usar arquivos de propriedades, então os apresentarei brevemente aqui. Sua estrutura de sintaxe é como: key = value. Preste atenção ao problema do Código Chinês ilegal e precisa ser transcodificado em ASCII. Os detalhes são os seguintes:
userInfo.account = itdragonblogUserinfo.age = 25Userinfo.Active = TrueUserinfo.created-date = 2018/03/11 16: 54: 30Userinfo.map.k1 = v1Userinfo.map.k2 = v2USERInfo.list = One, dois, dois, dois, dois, o twonemaSaSaSaSaSaSaSaSaMaMaMaMaMaMaSaMaMaSaMaSaMaSaMaSaMaSaMaSaSaMaSaSaMaSaMaSaMaSaSaSaSaSaMaSaSaSaSaSaSaM.K1 = v1USerinfo.ker.ker userInfo.Position.Salary = 19999.99
Receba valores dos arquivos de configuração e injete -os em classes de entidade, que são as mesmas que a YAML.
importar org.springframework.boot.context.properties.configurationproperties; importar org.springframework.tereotype.component; importar java.util.date; import java.util.list; import java.utilies.Map; No arquivo de configuração (o valor é encontrado através do prefixo)*/@componente@configurationProperties (prefix = "userInfo") public class Userinfo {private string Conta; idade inteira privada; Privado booleano ativo; data privada criadaDate; mapa privado <string, objeto> mapa; Lista de Lista Privada <Object>; posição privada em posição; // omita getter, setter, tostring métodos}3. Valor do arquivo de configuração
O Spring Boot recebe propriedades dos arquivos de configuração através da anotação do ConfigurationProperties. A partir do exemplo acima, podemos ver que a anotação do ConfigurationProperties pode especificar os dados que precisam ser importados em lotes definindo o prefixo. Suporta a obtenção de dados complexos, como literais, coleções, mapas, objetos, etc. Existe mais alguma coisa sobre a anotação do ConfigurationProperties? Qual é a diferença entre e a anotação de valor da primavera? Com essas perguntas em mente, vamos continuar lendo. (๑ • ̀ㅂ • ́) و✧
A) Prós e contras das proporties de configuração e valor
Prós e contras das anotações de configuração
1. Você pode lote de propriedades de injeção do arquivo de configuração;
2. Suporta a obtenção de tipos de dados complexos;
3. Os requisitos para os nomes de atributos correspondentes são baixos, como nome de usuário, user_name, nome de usuário e user_name, todos podem obter valores;
4. Suporte JSR303 Verificação de dados de Java;
5. A desvantagem é que ele não suporta expressões poderosas de bolas;
As vantagens e desvantagens da anotação de valor são exatamente o oposto. Ele só pode configurar valores de injeção um por um; Ele não suporta tipos de dados complexos, como matrizes e coleções; Não suporta verificação de dados; Possui requisitos estritos para correspondência de nome da propriedade. A maior característica é que ele suporta expressões de spel, tornando as funções mais ricas.
2) @ConfigurationProperties Explicação detalhada
Etapa 1: Importar dependências. Para usar a anotação do ConfigurationProperties, você precisa importar o processador de configuração de primavera de primavera de dependência;
Etapa 2: configure os dados. No arquivo de configuração Application.yml, configure os parâmetros de atributo, prefixados pelo ITDragon, e os parâmetros têm valores e matrizes literais, que são usados para determinar se a capacidade de obter atributos complexos é suportada;
Etapa 3: corresponde aos dados. Adicione asProperties de configuração da anotação na classe e defina o valor da propriedade Prefix como Itdragon. E adicione esta classe ao contêiner do IOC da Spring.
Etapa 4: verifique os dados. Adicione a verificação de dados Anotação validada, ative a verificação de dados e teste se ele suporta verificação de dados;
Etapa 5: Teste se a anotação do ConfigurationProperties suporta expressões de SPEL;
Dependências de importação: pom.xml Adicione dependências de procas-configuração de primavera-boot-boot
<Depencency> <PuerpId> org.springframework.boot </frugid> <stifactId> spring-boot-configuration-processor </artifactid> <pution> true </cptional> </dependency>
Dados de configuração: Application.yml Parâmetros da propriedade de configuração, o nome do apelido é usado para julgar a frouxidão das propriedades correspondentes. Se alterado para nick_name, você ainda pode obter o valor.
Itdragon: apelido: itdragonblog e-mail: [email protected] iPhone: 1234567890 Habilidades: [java, sql, html] criado_date: 2018/03/03/31 15:27:30
Combine e verifique os dados:
importar org.springframework.boot.context.properties.configurationproperties; importar org.springframework.tereotype.component; import org.springframework.validation.annoTation.validated; import javax.validation.cranstraints.mail; ConfigurationProperties anotação Classe de sintaxe* Etapa 1: Importar dependência Spring-Boot-Configuração-processador; * Etapa 2: adicione a classe modificada pela anotação do ConfigurationProperties ao contêiner do IOC da Spring; * Etapa 3: defina o atributo prefixo e especifique o prefixo que precisa ser injetado; * Etapa 4: Adicione a anotação de verificação de dados para ativar a verificação de dados; ** NOTA:* 1. O apelido e o CreatedDate estão no arquivo de configuração YML, e os parâmetros correspondentes são malhas e sublinhamentos, respectivamente, usados para testar sua frouxidão dos nomes de atributos correspondentes* 2. Teste de e -mail e iPhone que suporta JSR303 Verificação de dados* 3. "itdragon")@validatedpublic classe ConfigurationPropertieSentity {String privada apelido; // Analisando com sucesso, suportando o suporte de string privado de correspondência solta; // @Email // Parsing falhou e a verificação de dados foi bem -sucedida: BindValidationException: Erros de validação de ligação no iPhone de string privada Itdragon; Lista privada <String> Habilidades; data privada criadaDate; // analisando com sucesso, suportando atributos de correspondência solta // @configurationproperties ("#{(1+2-3)/4*5}") Operador de sequência privada; // Erro de sintaxe, não suportando expressão do SPEL: não aplicável ao campo // omita getter, setter, tostring métodos}3) Detalhes @Value
O blog anterior introduziu o uso de anotações de valor e aqui está uma breve explicação.
Etapa 1: Adicione a anotação de valor ao atributo e injeção de valor do arquivo de configuração através do parâmetro de configuração $ {};
Etapa 2: modifique o valor do parâmetro em $ {itdragon.ceatred_date} e altere -o para $ {itdragon.ceatreddate} para testar se a análise pode ser bem -sucedida;
Etapa 3: Adicione a anotação validada de verificação de dados, ative a verificação de dados e teste se ele suporta verificação de dados;
Etapa 4: teste se a anotação de valor suporta expressões de SPEL;
importar org.springframework.beans.factory.annotation.value; importar org.springframework.tereotype.component; importar org.springframework.validation.annotation.validado; importax.validation.cons.Email; 1: Adicione os parâmetros de injeção do valor da anotação nos atributos* Etapa 2: Adicione a classe modificada pela anotação do valor ao contêiner do IOC da mola; * Etapa 3: Adicione a anotação de verificação de dados para verificar se a verificação dos dados é suportada; * * Nota Pontos: * 1. ANÁTENO E CREATADO DATA NO PROFIGO DE CONFIGURAÇÃO YML, os parâmetros correspondentes são malhas e sub -escores, respectivamente, usados para testar sua frouxidão dos nomes de atributos correspondentes * 2. Os testes de e -mail e iPhone que suportam o JSR303 da verificação do valor do valor do valor do valor do valor do valor do valor do valor do valor do valor do valor do valor do valor do arquivo de configuração. * 2. Como é adicionar anotações de verificação da caixa de correio no iPhone, você ainda pode passar no teste. * 3. A complexa estrutura de dados não é suportada e o erro imediato é o mesmo que o primeiro: ilegalargumentException: não foi possível resolver o espaço reservado 'itdragon.abilities' em valor "$ {itdragon.abilities}" */@component@validatedpublic class ValueEntity {@Value ("$ {ITDRAGON.N.Nick-NAME-NAME-NAME-NAME-NAME-NAME-NAMEN} @Value ("$ {itdragon.email}") email de sequência privada; @Email @Value ("$ {itdragon.iphone}") // A análise é bem -sucedida e a verificação de dados não é suportada String privada iPhone; // @Value ("$ {itdragon.eatreddate}") // o parsing é o erro, a estrutura do complexo não suporta a lista privada <tring> hapility; A análise de erros de análise, não suporta propriedades de correspondência solta e deve ser estritamente consistente data privada criada; // O lado poderoso da anotação de valor: suporta expressão de spel @value ("#{(1+2-3)/4*5}") // Operação aritmética Operador de cordas privadas; @Value ("#{1> 2 || 2 <= 3}") // Operação relacional Comparação booleana privada; @Value ("#{SystemProperties ['java.version']}") // Configuração do sistema: OS.Name Private String SystemProperties; @Value ("#{t (java.lang.math) .abs (-18)}") // expressão private string mapexpression; // omita getter, setter, tostring métodos}4) Resumo do valor do arquivo de configuração
1. As anotações de configuração do suporte suportam a injeção de lote, enquanto as anotações de valor são adequadas para injeção única;
2. As anotações de configuraçãoProperties suportam a verificação de dados, enquanto as anotações de valor não;
3. As anotações de configuração do Propriedades suportam propriedades de correspondência soltas, enquanto as anotações de valor devem corresponder estritamente a propriedades;
4. ConfigurationProperties não suporta expressões poderosas de bolas, mas o valor as suporta;
4. Arquivos de configuração espanhol
Os espaços reservados e números aleatórios são relativamente simples, então publicarei o código aqui diretamente. O que deve ser observado é:
1. O valor do espaço reservado deve ser o caminho completo
2. Defina o valor padrão do espaço reservado, não deve haver espaço após o cólon
RAN: # O prefixo aqui não pode ser aleatório, valor ran: $ {aleatom.value} ran-ínt: $ {Random.int} ran-Long: $ {Random.long} ran-int-Num: $ {Random.int (10)} Ran-range: $ {$ Random.int [10,20]} Ran-PlaceLder: Chave é o caminho completo} importar org.springframework.boot.context.properties.configurationproperties; importar org.springframework.tereotype.component;/*** Número aleatório e sintaxe da placeholder classe*/@componente@configurationProperties (prefix = "ran") public Class Randomentity {Private Strings RanningRies; // gerar aleatoriamente um número inteiro privado de string; // gerar aleatoriamente um número inteiro privado de longa duração; // gerar aleatoriamente um número inteiro inteiro de longo prazo Ranintnum; // Randomly generate an integer private within a specified range Integer ranIntRange;// randomly generate an integer private String ranPlaceholder;// placeholder// omit getter, setter, toString method e} test code: @RunWith(SpringRunner.class)@SpringBootTestpublic class SpringBootYmlApplicationTests { @Autowired private UserInfo userInfo; @Autowired Private Yamlentity Yamlentity; @AUTOWIRED PRIVADO ConfigurationPropertieSentity ConfigurationPropertieSentity; @AUTOWIRED PRIVADO VALUE VALORENTITY VALORENTITY; @Autowired Private Randomentity Randomentity; @Test public void contextLoads () {// System.out.println ("Gramática Yaml:" + Yamlentity); // System.out.println ("Userinfo:" + userInfo); system.out.println ("ConfigurationProperties GramMAR:" + configative " : " + valueEntity); System.out.println ("Gramática aleatória:" + randomentidade); }}5. Resumo
1. O Spring Boot suporta arquivos de configuração em dois formatos, entre os quais a estrutura de dados da YAML é mais clara que as propriedades.
2. YAML é um idioma usado especialmente para escrever arquivos de configuração, que é muito conciso e poderoso.
3. A YAML possui requisitos rigorosos nos espaços e não pode ser substituída pela tecla TAB.
4. A YAML determina o nível pelo grau de indentação espacial, com espaços seguindo o cólon e os espaços seguindo a linha horizontal curta.
5. As anotações de configuração doPROPERTIDAS são adequadas para a injeção de lote de propriedades nos arquivos de configuração e as anotações de valor são adequadas para obter um item no arquivo de configuração.
6. As anotações de configuraçãoProperties suportam a verificação de dados para obter dados complexos e as anotações de valor suportam expressões de SPEL.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.