spring-boot-route (dos) varias formas de leer archivos de configuración

Spring Boot proporciona archivos de configuración en dos formatos, a saber propertiesy yml. La característica más grande de Spring Boot es la configuración automatizada, si queremos modificar el valor predeterminado de la configuración automatizada, podemos especificar los parámetros de nuestro propio servidor a través del archivo de configuración.

El archivo de configuración gestiona de forma intensiva la información de configuración. Si los parámetros de configuración están escritos en el código Java, es muy inconveniente de mantener. Si se utiliza el archivo de configuración, podemos gestionarlo y modificarlo de manera uniforme. Prefiero usar el ymlarchivo de configuración de formato, que YAMLes un lenguaje especialmente usado para escribir archivos de configuración, generalmente con yml como sufijo, su estructura es muy clara y más fácil de leer.

Después de escribir la configuración personalizada en el archivo de configuración, si desea utilizar la configuración en el código java, debe leer el archivo de configuración en este momento. Hay tres formas de leer el archivo de configuración. ¡Vamos a introducir cómo leerlo una por una!

El primero: use la anotación @Value para leer

Paso 1: agregue la siguiente configuración al archivo de configuración

config:
  name: Java旅途
  desc: spring-boot-route

Parte 2: crear una nueva clase Java para leer la información de configuración

@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;
    }
}

La anotación @Value es fácil de usar y adecuada para la inyección de un solo parámetro.

El segundo: use @ConfigurationProperties para leer

En comparación con @Value, @ConfigurationProperties es más adecuado para leer parámetros de tipo de matriz.

1. Obtén un solo objeto

El primer paso: crear la información de configuración del tipo de objeto en el archivo yml

configs:
  config:
    name: Java旅途
    desc: spring-boot-route

Paso 2: crear nueva información de configuración de asignación de entidades

@Component
@ConfigurationProperties(prefix = "configs.config")
@Data
public class Config {

    private String name;
    private String desc;
}

Paso 3: cree una nueva clase para probar si se obtienen los parámetros

@RestController
public class GetConfigurationProperties {

    @Autowired
    private Config config;

    @GetMapping("/getConfig")
    public String getConfig(){
        return config.getName()+";"+config.getDesc();
    }
}

2. Obtén una colección de objetos

Paso 1: cree un nuevo parámetro de tipo de matriz en el archivo yml

configs:
  config:
    - name: Java旅途
      desc: spring-boot-route
    - name: javatrip
      desc: spring-boot-yml

Paso 2: crear nueva información de configuración de asignación de entidades

@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;
    }
}

Paso 3: crea una nueva clase de prueba para obtener 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;
    }
}

Además de los dos métodos descritos anteriormente, la información del archivo de configuración también se puede leer a través de las variables de entorno del contexto Spring Boot. Sin embargo, los dos métodos anteriores pueden satisfacer completamente todas las necesidades y no se presentarán aquí.

Piensa y expande

Si varios archivos de configuración tienen la misma información de configuración, ¿cómo leer la información específica del archivo de configuración ?

El archivo de configuración tiene prioridad. Generalmente, la prioridad del archivo yml es superior a las propiedades, lo que provocará que la información de configuración de las propiedades se cargue más tarde, y la información de configuración de las propiedades tendrá mayor prioridad cuando finalmente se lea.

Las dos formas de leer el archivo de configuración descritas anteriormente se pueden usar junto con otra anotación. @PropertySource comúnmente usa tres atributos, uno es valuepara especificar el archivo de configuración, el otro es encodingpara especificar el código y el último es factorypara especificar Fábrica de resolución.

Tenga en cuenta aquí: @PropertySource solo cargará propertiesarchivos de formato de forma predeterminada , es decir, si especificamos el ymltipo de archivo, no tendrá efecto.En este momento, necesitamos reescribir la fábrica de análisis.

Primero mire el código fuente de fábrica de análisis predeterminado:

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álisis personalizado 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();
    }
}

Paso 1: cree dos archivos de configuración, test.yml y test.properties, y agregue la siguiente información de configuración

spring:
  value: javatrip123
  remark: javatrip123
spring:
  value: javatrip123
  remark: javatrip123

Paso 2: especificar el contenido del archivo de configuración de asignación del archivo de configuración

@Data
@Configuration
@PropertySource(value = {"classpath:test.yml"},encoding = "gbk")
@ConfigurationProperties(prefix = "spring")
public class Spring {

    private String value;
    private String remark;
}

Paso 3: crea una nueva clase para probar

@RestController
public class GetSource {

    @Autowired
    private Spring spring;

    @GetMapping("get")
    public String getSource(){
        return spring.getRemark()+";"+spring.getValue();
    }
}

Este es el segundo artículo de la serie spring-boot-route. Los artículos de esta serie son relativamente simples. El objetivo principal es ayudar a los estudiantes que son nuevos en Spring Boot a tener una comprensión sistemática. Este artículo ha sido incluido en mi github , ¡bienvenidos amigos star!

github : https://github.com/binzh303/spring-boot-route

Presta atención, no te pierdas

Si te sientes bien ensayos, atención bienvenida , aprobación , colección , tu apoyo es mi poder creativo, gracias.

Si hay algún problema con la redacción del artículo, no sea tacaño. Deje un mensaje y indíquelo. Lo comprobaré y modificaré a tiempo.

Si quieres conocerme más profundamente, puedes buscar " Java Journey " en WeChat para seguir. Responda " 1024 " para obtener videos de aprendizaje y libros electrónicos exquisitos. Envíe artículos técnicos a tiempo a las 7:30 todos los días, para que no esté solo en su camino al trabajo, y hay actividades mensuales de entrega de libros para ayudarlo a mejorar su poderío.

Supongo que te gusta

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