spring-boot-route (duas) várias maneiras de ler arquivos de configuração

Spring Boot fornece arquivos de configuração em dois formatos, a saber propertiese 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 ymlformato 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 é valuepara especificar o arquivo de configuração, o outro é encodingpara especificar o código e o último é factorypara especificar Fábrica de resolução.

Nota aqui: @PropertySource só carregará propertiesarquivos de formato por padrão , ou seja, se especificarmos o ymltipo 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!

githubhttps://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!

Acho que você gosta

Origin blog.51cto.com/14820531/2539845
Recomendado
Clasificación