Propriedades com a Primavera e a Primavera de Arranque

Propriedades com a Primavera e a Primavera de Arranque


Descrição

Este tutorial irá mostrar como configurar e utilizar as propriedades de Primavera via Java configuração e @PropertySource.

também veremos como as propriedades funcionam na Bota De Primavera.

leitura adicional:

Spring Expression Language Guide

este artigo explora Spring Expression Language (SpEL), uma poderosa linguagem de expressão que suporta questionar e manipular gráficos de objectos em execução.,
Read more →

Configure a Spring Boot Web Application

alguns dos configures mais úteis para uma aplicação Spring Boot.
Read more →

Guide to @ConfigurationProperties in Spring Boot

a quick and practical guide to @ConfigurationProperties annotation in Spring Boot.
ler mais →

registar um ficheiro de propriedades através de anotações

Primavera 3.1 também introduz a nova anotação @PropertySource como um mecanismo conveniente para adicionar fontes de propriedade ao ambiente.,

podemos usar esta anotação em conjunto com o @Configuração anotação:

@Configuration@PropertySource("classpath:foo.properties")public class PropertiesWithJavaConfig { //...}

Outra forma muito útil para registrar um novo arquivo de propriedades é através de um espaço reservado, o que nos permite selecionar dinamicamente o direito de arquivos em tempo de execução:

@PropertySource({ "classpath:persistence-${envTarget:mysql}.properties"})...

2.1. Definir várias localizações de propriedades

a anotação de @PropertySource é repetível de acordo com convenções Java 8., Portanto, se estamos usando Java 8 ou superior, podemos usar esta anotação para definir vários locais de propriedade:

é claro, também podemos usar a anotação @PropertySources e especificar um array de @PropertySource. Isto funciona em qualquer versão Java suportada, não apenas em Java 8 ou superior:

em qualquer dos casos, vale a pena notar que no caso de uma colisão de nome de propriedade, a última leitura de código tem precedência.,

Usando/Injecção de Propriedades

a injeção de uma propriedade com o @Valor de anotação é simples:

@Value( "${jdbc.url}" )private String jdbcUrl;

podemos também especificar um valor padrão para a propriedade:

@Value( "${jdbc.url:aDefaultUrl}" )private String jdbcUrl;

O novo PropertySourcesPlaceholderConfigurer adicionado na Primavera 3.1 resolver ${…} espaços reservados dentro de feijão definição de valores de propriedade e @Valor de anotações.,

Finalmente, pode-se obter o valor de uma propriedade usando o Ambiente de API:

@Autowiredprivate Environment env;...dataSource.setUrl(env.getProperty("jdbc.url"));

Propriedades Com Mola de Arranque

Antes de entrar em mais opções avançadas de configuração para as propriedades, vamos passar algum tempo a olhar para as novas propriedades de suporte na Primavera de Inicialização.

Geralmente falando, este novo suporte envolve menos configuração em comparação com a mola padrão, que é, naturalmente, um dos principais objetivos do Boot.

4.1. aplicacao.,propriedades: o ficheiro de propriedades por omissão

Boot aplica a sua convenção típica sobre a abordagem de configuração aos ficheiros de propriedades. Isto significa que podemos simplesmente apresentar uma candidatura.ficheiro de Propriedades no nosso directório src / main / resources, e será detectado automaticamente. Podemos então injectar quaisquer propriedades carregadas a partir dele como normal.

assim, ao usar este arquivo padrão, não temos que registrar explicitamente um código próprio ou mesmo fornecer um caminho para um arquivo de propriedade.,

também podemos configurar um ficheiro diferente no tempo de execução, se for necessário, usando uma propriedade do ambiente:

java -jar app.jar --spring.config.location=classpath:/another-location.properties

a partir do arranque da Primavera 2.3, também podemos especificar localizações de caracteres especiais para os ficheiros de configuração.por exemplo, podemos definir a mola.configuracao.propriedade da localização da configuração/*/:

java -jar app.jar --spring.config.location=config/*/

desta forma, o arranque da mola irá procurar por ficheiros de configuração que correspondam ao padrão de configuração/ * / directório fora do nosso ficheiro jar. Isto é útil quando temos várias fontes de propriedades de configuração.

desde a versão 2.4.,0, o arranque de molas suporta a utilização de ficheiros de propriedades multi-documentais, tal como o YAML faz por design:

baeldung.customProperty=defaultValue#---baeldung.customProperty=overriddenValue

Note que, para os ficheiros de propriedades, a notação de três traços é precedida por um carácter de comentário (#).

4.2. Ficheiro de propriedades específicas do ambiente

Se for necessário atingir diferentes ambientes, existe um mecanismo integrado para isso no arranque.

Podemos simplesmente definir um ambiente de Aplicação.arquivo de Propriedades no diretório src / main / resources, e então definir um perfil de mola com o mesmo nome de ambiente.,

Por exemplo, se definirmos um ambiente de “estadiamento”, isso significa que teremos de definir um perfil de estadiamento e, em seguida, a aplicação-estadiamento.propriedade.

este ficheiro env será carregado e terá precedência sobre o ficheiro de propriedade por omissão. Note que o arquivo padrão ainda será carregado, é apenas que quando há uma colisão de propriedade, o arquivo de propriedade específica do ambiente tem precedência.

4. 3. Arquivo de propriedades específicas de teste

também podemos ter um requisito de usar valores de propriedade diferentes quando a nossa aplicação está sob teste.,

Spring Boot lida com isso para nós, procurando em nosso diretório src/test/resources durante uma execução de teste. Mais uma vez, propriedades padrão ainda será injetável como normal, mas será substituído por estes se houver uma colisão.

4.4. The @TestPropertySource Annotation

If we need more granular control over test propertysource properties, then we can use the @TestPropertySource annotation.,

Isso nos permite definir propriedades de teste para um teste específico contexto, tendo precedência sobre a propriedade padrão de fontes:

Se a gente não quiser usar um arquivo, podemos especificar nomes e valores diretamente:

Nós também podemos conseguir um efeito semelhante utilizando o argumento de propriedades do @SpringBootTest anotação:

4.5. Propriedades hierárquicas

Se tivermos propriedades agrupadas em conjunto, podemos fazer uso da anotação de @ConfigurationProperties, que irá mapear estas hierarquias de propriedades em gráficos de objetos Java.,

Vamos dar algumas propriedades usadas para configurar uma conexão de banco de dados:

database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=bar

E, em seguida, vamos usar a nota para mapeá-los para um objeto de banco de dados:

Primavera de Inicialização aplica a convenção sobre configuração abordagem novamente, automaticamente o mapeamento entre nomes de propriedades e seus campos correspondentes. Tudo o que precisamos de fornecer é o prefixo da propriedade.

Se quiser aprofundar as propriedades de configuração, veja o nosso artigo em profundidade.

4, 6. Alternative: YAML Files

Spring also supports YAML files.,

Todas as mesmas regras de nomeação se aplicam para os arquivos de propriedades específicos do teste, específicos do ambiente e padrão. A única diferença é a extensão de arquivo e uma dependência da Biblioteca SnakeYAML sendo em nosso classpath.,

YAML é particularmente bom para hierárquica de armazenamento de propriedade; a propriedade seguinte arquivo:

database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=barsecret: foo

é sinônimo com a seguinte arquivo YAML:

database: url: jdbc:postgresql:/localhost:5432/instance username: foo password: barsecret: foo

também vale a pena mencionar que arquivos YAML não suportam o @PropertySource anotação, então, se precisamos usar esta anotação, seria restringir-nos a utilizar um arquivo de propriedades.

outro ponto notável é que na versão 2.4.0 o Boot de mola mudou a forma como as propriedades são carregadas a partir de arquivos multi-documentais YAML., Anteriormente, a ordem em que foram adicionados foi baseada na ordem de ativação do perfil. Com a nova versão, no entanto, o framework segue as mesmas regras de ordenação que indicamos anteriormente .os ficheiros de propriedades; as propriedades declaradas mais baixas no ficheiro irão simplesmente sobrepor as mais altas.além disso, nesta versão os perfis não podem mais ser ativados a partir de documentos específicos do perfil, tornando o resultado mais claro e previsível.

4, 7. Importar ficheiros de configuração adicionais

antes da versão 2.4.,0, inicialização da mola permitida, incluindo ficheiros de configuração adicionais usando a mola.configuracao.localização e primavera.configuracao.propriedades adicionais de localização, mas eles tinham certas limitações. Por exemplo, eles tiveram que ser definidos antes de iniciar a aplicação (como propriedades de ambiente ou sistema, ou usando argumentos de linha de comando) como eles foram usados no início do processo.

na versão mencionada, podemos usar a mola.configuracao.importar propriedade dentro da aplicação.Propriedades ou aplicação.ficheiro yml para incluir facilmente ficheiros adicionais., Esta propriedade oferece suporte a alguns recursos interessantes:

  • adicionar vários arquivos ou diretórios
  • os arquivos podem ser carregados a partir do classpath ou a partir de um diretório externo
  • , que indica se o processo de inicialização deve falhar se um arquivo não for encontrado, ou se é um arquivo opcional
  • importar extensionless arquivos

Vamos ver um exemplo válido:

Nota: aqui nós formatado esta propriedade usando quebras de linha apenas para maior clareza.

A mola tratará as importações como um novo documento inserido imediatamente abaixo da declaração de importação.

4, 8., Propriedades a Partir de Argumentos de Linha de Comando

Além de utilizar arquivos, podemos passar propriedades diretamente na linha de comando:

java -jar app.jar --property="value"

também podemos fazer isso através de propriedades do sistema, que são fornecidos antes da jarra de comando em vez de depois de:

java -Dproperty.name="value" -jar app.jar

4.9. Propriedades de variáveis de ambiente

arranque de mola também irá detectar variáveis de ambiente, tratando-as como propriedades:

export name=valuejava -jar app.jar

4.10., A aleatoriedade dos Valores de Propriedade

Se não queremos deterministas valores de propriedade, podemos usar RandomValuePropertySource para tornar os valores das propriedades:

random.number=${random.int}random.long=${random.long}random.uuid=${random.uuid}

4.11. Tipos adicionais de fontes de propriedade

Bota De Mola suporta uma infinidade de fontes de propriedade, implementando uma ordenação bem-pensada para permitir uma ultrapassagem sensata. Vale a pena consultar a documentação oficial, que vai além do âmbito deste artigo.,

configuração usando feijões brutos-o ‘Propertysourcesplaceholderconfiguer’

para além dos métodos convenientes de obter propriedades na primavera, também podemos definir e reger manualmente a configuração da propriedade.

trabalhar com o Cabetysourcesplaceholderconfiguer dá-nos o controlo total sobre a configuração, com a desvantagem de ser mais descritiva e a maior parte do tempo, desnecessária.,

Let’s see how we can definite this bean using Java configuration:

Properties in Parent-Child Contexts

this question comes up again and again: What happens when our web application has a parent and a child context? O contexto pai pode ter alguma funcionalidade e feijões comuns, e então um (ou múltiplos) contextos-filhos, talvez contendo grãos servlet-específicos.

nesse caso, Qual é a melhor maneira de definir arquivos de propriedades e incluí-los nesses contextos? E como melhor recuperar estas propriedades da Primavera?vamos fazer uma análise simples.,

Se o ficheiro estiver definido no contexto-mãe:

  • @O valor funciona no contexto-filho: sim
  • @o valor funciona no contexto-mãe: sim
  • mbiente.getProperty in Child context: YES
  • environment.getProperty in Parent context: YES

If the file is defined in the Child context:

  • @Value works in Child context: YES
      @Value works in Parent context: NO
    • environment.getProperty in Child context: YES
    • environment.,getProperty in Parent context: no

    Conclusion

    este artigo mostrou vários exemplos de trabalho com ficheiros de propriedades e propriedades na primavera.

    Como sempre, todo o código que apoia o artigo está disponível no GitHub.

    Começar com Mola 5 e Primavera de Inicialização 2, através do Aprender a Primavera curso:

    >> CURSO

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *