- 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)
- arquivo: ./ config / (diretório de configuração do caminho do projeto atual);
- arquivo: ./ (no caminho atual do projeto);
- classpath: / config / (no diretório classpath config);
- 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
- Defina a porta como 8888 no arquivo de configuração no diretório resources /;
- O arquivo de configuração no diretório resources / config define a porta para 9999;
- Defina a porta como 6666 no arquivo de configuração no caminho do projeto;
- 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 @Autowire
para 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();
}
}