Spring Boot fornece arquivos de configuração em dois formatos, a saber properties
e yml
. A maior característica do Spring Boot é a configuração automatizada.Se quisermos modificar o valor padrão da configuração automatizada, podemos especificar os parâmetros de nosso próprio servidor através do arquivo de configuração.
O arquivo de configuração gerencia intensamente as informações de configuração.Se os parâmetros de configuração são escritos no código Java, é muito inconveniente de manter.Se o arquivo de configuração é usado, podemos gerenciá-lo e modificá-lo uniformemente. Eu prefiro usar o yml
formato de arquivo de configuração, que YAML
é uma linguagem especialmente usada para escrever arquivos de configuração, geralmente com yml como sufixo, sua estrutura é muito clara e fácil de ler.
Depois de escrever a configuração personalizada no arquivo de configuração, se você quiser usar a configuração no código java, você precisa ler o arquivo de configuração neste momento. Existem três maneiras de ler o arquivo de configuração. Vamos apresentar como lê-lo um por um!
O primeiro: use a anotação @Value para ler
Etapa 1: adicionar a seguinte configuração ao arquivo de configuração
config:
name: Java旅途
desc: spring-boot-route
Parte 2: Crie uma nova classe Java para ler as informações de configuração
@RestController
public class GetValue {
@Value("${config.name}")
private String name;
@Value("${config.desc}")
private String desc;
@GetMapping("getValue")
public String getValue(){
return "name="+name+";desc="+desc;
}
}
A anotação @Value é simples de usar e adequada para injeção de parâmetro único.
O segundo: use @ConfigurationProperties para ler
Comparado com @Value, @ConfigurationProperties é mais adequado para ler parâmetros de tipo de array.
1. Obtenha um único objeto
A primeira etapa: criar as informações de configuração do tipo de objeto no arquivo yml
configs:
config:
name: Java旅途
desc: spring-boot-route
Etapa 2: Criar novas informações de configuração de mapeamento de entidade
@Component
@ConfigurationProperties(prefix = "configs.config")
@Data
public class Config {
private String name;
private String desc;
}
Etapa 3: crie uma nova classe para testar se os parâmetros são obtidos
@RestController
public class GetConfigurationProperties {
@Autowired
private Config config;
@GetMapping("/getConfig")
public String getConfig(){
return config.getName()+";"+config.getDesc();
}
}
2. Obtenha uma coleção de objetos
Etapa 1: crie um novo parâmetro de tipo de matriz no arquivo yml
configs:
config:
- name: Java旅途
desc: spring-boot-route
- name: javatrip
desc: spring-boot-yml
Etapa 2: Criar novas informações de configuração de mapeamento de entidade
@Component
@ConfigurationProperties(prefix = "configarr")
@Data
public class Configs {
private List<Config> config = new ArrayList<>();
@Data
public static class Config{
private String name;
private String desc;
}
}
Etapa 3: crie uma nova classe de teste para obter parâmetros
@RestController
public class GetConfigurationProperties {
@Autowired
private Configs configs;
@GetMapping("/getConfigs")
public String getConfigs(){
String content = "";
List<Configs.Config> configList = configs.getConfig();
Map<String,Object> map = new HashMap<>();
for (Configs.Config bean : configList){
content += bean.getName()+";"+bean.getDesc()+",";
}
return content;
}
}
Além dos dois métodos descritos acima, as informações do arquivo de configuração também podem ser lidas por meio das variáveis de ambiente do contexto do Spring Boot. No entanto, os dois métodos acima podem atender totalmente a todas as necessidades e não serão apresentados aqui.
Pense e expanda
Se vários arquivos de configuração tiverem as mesmas informações de configuração, como ler informações específicas do arquivo de configuração ?
O arquivo de configuração tem prioridade. Geralmente, a prioridade do arquivo yml é maior do que as propriedades, o que fará com que as informações de configuração das propriedades sejam carregadas posteriormente, e as informações de configuração das propriedades terão uma prioridade maior quando forem finalmente lidas.
As duas maneiras de ler o arquivo de configuração descritas acima podem ser usadas em conjunto com outra anotação. @PropertySource geralmente usa três atributos, um é value
para especificar o arquivo de configuração, o outro é encoding
para especificar o código e o último é factory
para especificar Fábrica de resolução.
Nota aqui: @PropertySource só carregará properties
arquivos de formato por padrão , ou seja, se especificarmos o yml
tipo de arquivo, ele não terá efeito.Neste momento, precisamos reescrever a fábrica de análise.
Primeiro, olhe para o código-fonte de fábrica de análise padrão:
public class DefaultPropertySourceFactory implements PropertySourceFactory {
public DefaultPropertySourceFactory() {
}
public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {
return name != null ? new ResourcePropertySource(name, resource) : new ResourcePropertySource(resource);
}
}
Fábrica de análise personalizada para implementar PropertySourceFactory
public class YmlConfigFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
String sourceName = name != null ? name : resource.getResource().getFilename();
if (!resource.getResource().exists()) {
return new PropertiesPropertySource(sourceName, new Properties());
} else if (sourceName.endsWith(".yml") || sourceName.endsWith(".yaml")) {
Properties propertiesFromYaml = loadYml(resource);
return new PropertiesPropertySource(sourceName, propertiesFromYaml);
} else {
return super.createPropertySource(name, resource);
}
}
private Properties loadYml(EncodedResource resource) throws IOException {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
}
}
Etapa 1: crie dois arquivos de configuração, test.yml e test.properties, e adicione as seguintes informações de configuração
spring:
value: javatrip123
remark: javatrip123
spring:
value: javatrip123
remark: javatrip123
Etapa 2: especificar o conteúdo do arquivo de configuração de mapeamento do arquivo de configuração
@Data
@Configuration
@PropertySource(value = {"classpath:test.yml"},encoding = "gbk")
@ConfigurationProperties(prefix = "spring")
public class Spring {
private String value;
private String remark;
}
Etapa 3: crie uma nova classe para teste
@RestController
public class GetSource {
@Autowired
private Spring spring;
@GetMapping("get")
public String getSource(){
return spring.getRemark()+";"+spring.getValue();
}
}
Este é o segundo artigo da série spring-boot-route. Os artigos desta série são relativamente simples. O objetivo principal é ajudar os alunos que são novos no Spring Boot a ter uma compreensão sistemática. Este artigo foi incluído no meu github , bem-vindos amigos star
!
github:https://github.com/binzh303/spring-boot-route
Preste atenção, não se perca
Se você sente bons ensaios, bem-vinda atenção , polegares para cima , coleção , seu apoio é meu poder criativo, obrigado.
Se houver algum problema com a redação do artigo, por favor, não seja mesquinho. Deixe uma mensagem e indique. Vou verificar e modificar a tempo.
Se você quiser me conhecer mais profundamente, pode pesquisar " Java Journey " no WeChat para seguir. Responda " 1024 " para obter vídeos de aprendizagem e e-books requintados. Publique artigos técnicos pontualmente às 7h30 todos os dias, para que você não esteja sozinho no caminho para o trabalho, e há atividades mensais de entrega de livros para ajudá-lo a melhorar seu hard power!