Prefácio
Este artigo se concentrará em explicar o uso da anotação @PropertySource na primavera e como carregar o arquivo de configuração especificado por meio da anotação do PropriedadeSource. Ele também usa a anotação PropertySource e as anotações @ConfigurationProperties. Não vou dizer muito abaixo, vamos aprender e estudar com o editor.
1.1. Propriedadesource Anotation carrega o arquivo de propriedade especificado
A estrutura de mola fornece anotações do PropertySource, com o objetivo de carregar o arquivo de propriedade especificado. Em seguida, vamos dar uma olhada em como usar esta anotação. Primeiro, definimos uma classe de configuração e adicionamos a anotação do Propriedadesource à classe da seguinte maneira:
@Componente@propriedadesource (value = {"classPath: config/jdbc-Bainuo-dev.properties"}, ignoreReSourceNotFound = false, coding = "utf-8", name = "jdbc-Bainuo-dev.proporties public String geturl () {return url; } public void Seturl (String url) {this.url = url; } @Override public String tostring () {return "CustomerDataSourceConfig {" + "url = '" + url +'/'' + '}'; }} O objetivo do código acima é carregar jdbc-bainuo-dev.properties no arquivo de configuração no caminho da classe. Onde a codificação é usada para especificar a codificação usada para ler o arquivo de propriedade, geralmente usamos o UTF-8; IgnoreResourceNotFound significa se um erro é relatado quando o arquivo de configuração especificado não existe e o padrão é falso; Por exemplo, o arquivo de propriedade de carregamento especificado acima é jdbc-bainuo-dev.properties . Se o arquivo não existir, o programa não reportará um erro quando o ignoreReSourceNotFound for verdadeiro. Se o IgnoreReSourceNotFound for falso, o programa relatará um erro diretamente. No desenvolvimento real do projeto, é melhor definir o IgnoreResourceNotFound como false. O valor padrão deste parâmetro é falso.
O valor do valor é definir o arquivo de atributo a ser carregado e várias propriedades podem ser carregadas ao mesmo tempo. O valor do nome que definimos é jdbc-bainuo-dev.properties . Esse valor deve ser único no ambiente de troca, se não for definido, o valor é: " class path resource [config/jdbc-bainuo-dev.properties] ".
Muitas pessoas podem estar se perguntando por que é " class path resource [config/jdbc-bainuo-dev.properties] "? Isso envolve o recurso da classe de encapsulamento na primavera para arquivos de recursos. O valor que configuramos acima é " classpath:config/jdbc-bainuo-dev.properties ", então a Spring descobriu que começa com o ClassPath, então o final está usando a subclasse ClassPathResource. Se ele começar com um arquivo, a classe que você acaba usando é o FileSystemResource.
Depois de entender a classe de recursos descritos acima. Vamos deixar claro novamente que, se o valor do nome não estiver definido no @PropertySource, a regra de geração do valor do nome é: Encontre a subclasse de recurso encapsulada final com base no valor do valor e, em seguida, chame o método GetDescription no objeto de instância de subclasse de recursos específicos. O valor de retorno do método GetDescription é o valor final do nome.
Por exemplo, o método GetDescription na classe ClassPathResource é implementado da seguinte maneira:
public String getDescription () {StringBuilder Builder = new StringBuilder ("Classe Path Resource ["); String pathtoouse = caminho; if (this.clazz! = null &&! pathogusue.startswith ("/")) {builder.append (classutils.classpackageAgasResourCepath (this.clazz)); construtor.append ('/'); } if (PathTouse.StartSwith ("/")) {PATHTOUSE = PATHTOUSE.SUBSTRING (1); } builder.Append (PathTouse); construtor.append (']'); Return Builder.ToString ();} A lógica de processamento de nomes acima pode ficar temporariamente impressionada e o código -fonte será rastreado em detalhes para explicar no futuro.
1.2. Propriedadesource Anotation carrega o teste de arquivo de propriedade especificado
No exposto, configuramos a anotação PropertySource para carregar o arquivo "classpath:config/jdbc-bainuo-dev.properties" . A estrutura de diretório deste arquivo é mostrada na figura abaixo:
O conteúdo do arquivo JDBC-Bainuo-Dev.Properties é o seguinte:
spring.datasource.shareniu.url = shareniu
O conteúdo do arquivo Application.Properties são os seguintes:
spring.profiles.active = dev
No arquivo de configuração acima, a propriedade spring.profiles.active configura o ambiente atual usado é dev. spring.datasource.shareniu.url é apenas uma propriedade comum e não tem significado especial em si.
Vamos começar a escrever aula de inicialização do Springboot da seguinte maneira:
@SpringbooTApplicationPublic Classe DemoApplication {public static void main (String [] args) {SpringApplication springApplication = new SpringApplication (DemoApplication.class); ConfigurableApplicationContext ConfigurableApplicationContext = springApplication.run (args); CustomerDataSourceConfig1 CustomerDataSourceConfig = ConfigurableApplicationContext .GetBean (CustomerDataSourceConfig1.class); System.out.print (CustomerDatasourceConfig);}} Execute o código acima e a saída do programa é a seguinte:
CustomerDataSourceConfig {url = 'null'} Estranho, por que o URL está vazio? A anotação do PropertySource já não carregou o arquivo jdbc-bainuo-dev.properties no ambiente atual? Podemos também tentar ver se a propriedade spring.datasource.shareniu.url em jdbc-bainuo-dev.properties pode ser obtida e, em seguida, verificar do lado se a antação da propriedade do imóvel carregou o arquivo jdbc-bainuo-dev.properties para o ambiente atual.
Modifique o código da classe de inicialização acima da seguinte forma:
@SpringbooTApplicationPublic Classe DemoApplication {public static void main (String [] args) {SpringApplication springApplication = new SpringApplication (DemoApplication.class); ConfigurableApplicationContext ConfigurableApplicationContext = springApplication.run (args); CustomerDataSourceConfig1 CustomerDataSourceConfig = ConfigurableApplicationContext.getBean (CustomerDataSourceConfig1.class); String Property = ConfigurableApplicationContext.getenvironment (). GetProperty ("spring.datasource.shareniu.url"); System.out.println (propriedade); System.out.print (CustomerDatasourceConfig);}} Execute o código acima e a saída do programa é a seguinte:
Shareniu
A partir do código acima, podemos ver que o PropertySource é realmente eficaz. Então, como injetarmos automaticamente spring.datasource.shareniu.url Valor da propriedade na propriedade URL na classe CustomerDatasourceConfig1?
1.3. A anotação do PropertySource lê o arquivo especificado e injeta as propriedades na classe de configuração
O Spring fornece anotação @Value para ler os valores do atributo no arquivo de configuração e defini -los nos atributos correspondentes. Aqui aprendemos a usar a anotação @value. O mesmo vale para as duas classes no texto acima como exemplos para explicações detalhadas. Primeiro, você precisa modificar a classe CustomerDatasourceConfig1. A parte da modificação é a seguinte:
@Componente@PropertySource (name = "jdbc-bainuo-dev.properties", value = {"classPath: config/jdbc-Bainuo-dev.properties"}, IGNORERESOURCENOTFIG1, FALSE, ECCODING = "UTF-8) @Value ("$ {spring.datasource.shareniu.url}") private string url;} Na classe acima, a anotação @value é adicionada ao campo URL e a expressão do SPEL é especificada como ${spring.datasource.shareniu.url} . Execute a classe de inicialização do Springboot novamente e a saída do console é Shareniu. Indica que a injeção de valores de atributo pode realmente ser feita através do @Value. No entanto, um dos aspectos menos amigáveis do uso do método de anotação @Value é que, quando há um grande número de propriedades no projeto para configuração, precisamos adicionar @value anotação aos campos de classe um por um, o que é realmente difícil, mas podemos resolver esse problema através da @ConfigurationProperties Annotation fornecido pela Springboot.
1.4. ConfigurationProperties Uso da anotação
@ConfigurationProperties é uma anotação de nível de classe, e o uso específico é o seguinte:
@Componente @configurationproperties (prefix = "spring.dataSource.shareniu") @PropertySource (name = "jdbc-Bainuo-dev.properties", value = {"classpath: config/jdbc-Bainuo-dev.properties"},, IgnoreResous: CustomerDataSourceConfig1 {private String url; } No código acima, a anotação do ConfigurationProperties é adicionada à classe CustomerDatasourceConfig1, e o prefixo da propriedade é spring.datasource.shareniu . Dessa forma, ao processar o Springboot, ele digitalizará todos os campos na classe atual e pesquisará e montará propriedades. Por exemplo, se configurarmos prefix = "spring.datasource.shareniu" , existe um campo de URL na classe CustomerDataSourceConfig1, o atributo que o campo de URL precisa corresponder é prefixo+ campo = spring.datasource.shareniu.url .
Isso não é apenas uma pergunta? E se o campo especificado não encontrar o atributo? Isso pode ser configurado da seguinte maneira:
@ConfigurationProperties (prefix = "spring.dataSource.shareniu", ignoreunknownfields = true, ignoreinvalidfields = true)
Ignoreunknownfields: ignore campos desconhecidos.
ignoreInValidFields: se deve ignorar os campos que não foram verificados. Como você entende isso? Por exemplo, se configurarmos uma variável de tipo de string no arquivo de configuração e os campos da classe são do tipo int, ela definitivamente relatará um erro. Se isso acontecer, podemos tolerar que o valor da propriedade precisa ser configurado para TRUE. Este valor de parâmetro é padrão para false.
Este artigo explicará aqui. No artigo subsequente, explicaremos como a anotação @PropertySource pode realizar a leitura de arquivos de configuração em diferentes ambientes. Os arquivos em diferentes ambientes são alternados dinamicamente para ler. O PropertySource não é suportado por padrão; portanto, precisamos expandir o código -fonte correspondente a esta anotação.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.