(3) arquivo de configuração do Boot Spring, ordem de carregamento, princípio de configuração

Conteúdo do artigo :

  • Uso básico do arquivo de configuração SpringBoot;
  • Explique a prioridade do arquivo de configuração yaml;
  • diretório do arquivo de configuração yaml e instruções de comparação;
  • Propriedades de configuração personalizadas;
  • Comparação de duas anotações @ConfigurationProperties e @Value;
  • Dicas de configuração personalizadas do yaml da idéia
  • Carregar configuração externa;
  • Arquivo de configuração de montagem (propriedades, yaml);
  • Introduzir arquivo de configuração xml.

Primeiro, o uso básico do arquivo de configuração SpringBoot

(1) SpringBoot usa um arquivo de configuração global, o nome do arquivo de configuração é fixo;

  • inscrição. propriedades
  • aplicação. marl
  • Sintaxe básica do YAML
       - Use recuo para representar relacionamentos hierárquicos
       - Teclas de tabulação não são permitidas ao recuar , apenas espaços são permitidos .
       - O número de espaços recuados não é importante, desde que os elementos do mesmo nível estejam alinhados à esquerda
       - Diferencia maiúsculas de minúsculas
  • Três estruturas de dados suportadas pelo YAML
     - Objeto: uma coleção de pares de valores-chave
     - Matriz: um conjunto de valores organizados em ordem
     - Literais: valores únicos e indivisíveis

(2) Conclusão da prática: no mesmo diretório , prioridade de configuração de propriedades> prioridade de configuração YAML.

                           Portanto, podemos trazer a configuração de propriedades quando o pacote jar começa a substituir a configuração

(3) Diretório do arquivo de configuração:

     O arquivo de configuração do SpringBoot pode ser colocado em vários caminhos, e a prioridade de configuração em diferentes caminhos é diferente. Diretório localizável (prioridade de alta a baixa)

  1. arquivo: ./ config / (diretório de configuração do caminho do projeto atual);
  2. arquivo: ./ (no caminho atual do projeto);
  3. classpath: / config / (no diretório classpath config);
  4. classpath: / (em configuração do caminho de classe). 

A prioridade é de alta a baixa, e a configuração de alta prioridade substituirá a configuração de baixa prioridade ; o SpringBoot carregará todos os arquivos de configuração desses quatro locais e complementará a configuração ;

  •   Classe dependente do caminho: ConfigFileApplicationListener

    

      O atributo DEFAULT_SEARCH_LOCATIONS define o diretório carregado; no método getSearchLocations () , a vírgula é analisada em um Set e a classe interna Loader é responsável pelo processo de carregamento desse arquivo de configuração, incluindo o carregamento da configuração do ambiente especificado do perfil , na forma do aplicativo + '-' + name Carregar .

private Set<String> getSearchLocations() {
      if (this.environment.containsProperty("spring.config.location")) {
         return this.getSearchLocations("spring.config.location");
        } else {
                Set<String> locations = 
           this.getSearchLocations("spring.config.additional-location");
                locations.addAll(
                   this.asResolvedSet(ConfigFileApplicationListener.this.searchLocations, 
                  "classpath:/,classpath:/config/,file:./,file:./config/"));
                return locations;
            }
        }

  Após adicionar à lista, inverta a ordem de coleta:

private Set<String> asResolvedSet(String value, String fallback) {
            List<String> list = Arrays.asList(StringUtils.trimArrayElements
                  (StringUtils.commaDelimitedListToStringArray(value != null ? 
                       this.environment.resolvePlaceholders(value) : fallback)));
            Collections.reverse(list);
            return new LinkedHashSet(list);
        }

 Em resumo:

   Em seguida, tome a configuração da porta como um exemplo

  1. Defina a porta como 8888 no arquivo de configuração no diretório resources /;
  2. O arquivo de configuração no diretório resources / config define a porta para 9999;
  3. Defina a porta como 6666 no arquivo de configuração no caminho do projeto;
  4. O arquivo de configuração no diretório de configuração do caminho do projeto define a porta para 7777;

               å¨è¿éæå ¥ å¾çæè¿ °

Resultado final da operação:

  

Através do método da variável de controle, pode ser demonstrado
que a prioridade é de alto a baixo, e a configuração de alta prioridade substituirá a configuração de baixa prioridade

Segundo, regras de acesso a recursos estáticos, método personalizado de configuração de arquivos estáticos

Terceiro, a maneira como o arquivo de configuração vincula o valor ao bean

(1) Use a anotação @ConfigurationProperties + @ Component na inicialização do Spring

@Component
@ConfigurationProperties(locations = "classpath:mail.properties", 
                                     ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
    private String from;
    private String username;
    private String password;
    private Smtp smtp;
}

(2) @ Bean + @ ConfigurationProperties para ligação

    @Bean
    @ConfigurationProperties(locations = "classpath:mail.properties", prefix = "mail")
    public MailProperties mailProperties(){
        MailProperties mp = new MailProperties();
        System.out.println("zheli " + mp);
        return mp;

    }

  (3) @ConfigurationProperties + @EnableConfigurationProperties e use o Spring @Autowirepara injetar o bean de configuração de email:

@ConfigurationProperties(locations = "classpath:mail.properties", 
                                ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
    private String from;
    private String username;
    private String password;
    private Smtp smtp;
}

O método (3) requer @EnableConfigurationProperties (Person.class) no final para tornar @ConfigurationProperties: eficaz

Em seguida, na classe de inicialização, configure @EnableConfigurationProperties da seguinte maneira e injete @Autowired onde é usado

@SpringBootApplication
@EnableConfigurationProperties(MailProperties.class)
public class TestProperty1 {

    @Autowired
    private MailProperties mailProperties;

}

Quarto, @Value obtém o valor e @ConfigurationProperties obtém a comparação de valores

Nota : eles podem obter o valor no arquivo de configuração yml ou propriedades; ( tipos complexos, como mapas, listas, etc. )

  • Se dissermos que precisamos apenas obter um valor no arquivo de configuração em uma lógica comercial, use @Value;
  • Se dissermos que escrevemos um javaBean especialmente para mapear com o arquivo de configuração, usaremos @ConfigurationProperties diretamente;

A verificação de dados é adicionada ao arquivo de configuração:

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式
    @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

Seis, carregue o arquivo de configuração especificado

(1) @ PropertySource & @ ImportResource & @ Bean

  • @ PropertySource : carrega o arquivo de configuração especificado;
/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
 *
 */
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式
   // @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
  • @ ImportResource : Importando arquivo de configuração do Spring, de modo que o conteúdo do arquivo de configuração que é para entrar em vigor;

    Não há arquivo de configuração do Spring no Spring Boot, e o arquivo de configuração que escrevemos por nós mesmos não pode ser reconhecido automaticamente;

    Quero que o arquivo de configuração do Spring entre em vigor e carregue; @ImportResource está marcado em uma classe de configuração

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

Para gravar arquivos de configuração do Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>

O SpringBoot recomenda adicionar componentes ao contêiner ; é recomendável usar o método de anotação completa

1. Classe de configuração @Configuration ------> Arquivo de configuração do Spring

2. Use @Bean para adicionar componentes ao contêiner

/**
 * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
 *
 * 在配置文件中用<bean><bean/>标签添加组件
 *
 */
@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}

 

Publicado 108 artigos originais · Gosto 58 · Visita mais de 50.000

Acho que você gosta

Origin blog.csdn.net/qq_41893274/article/details/104712405
Recomendado
Clasificación