Spring boot lee el contenido del archivo de propiedades


Utilice el proyecto Spring Boot de Kotlin para leer el contenido de las propiedades, incluida la lectura de cadenas, listas, mapas, etc.

1. Lea el contenido de las propiedades.

1.1 Leer la cadena en propiedades

Lea el nombre y la cantidad de libros del archivo de configuración.

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration

@Configuration
@ConfigurationProperties(prefix = "test.book")
class BookProperties {
    
    
    lateinit var name: String
    var count by Delegates.notNull<Int>()
}

Luego configure el siguiente contenido en propiedades:

test.book.name=Kotlin
test.book.count=20

De esta manera, cuando se inicia el programa, se puede obtener el valor de nombre configurado Kotlin y el valor de recuento 20.

1.2 Leer la lista y el mapa en propiedades

Lea la lista del archivo de configuración, que contiene el nombre del autor, y lea al cliente en forma de mapa, indicando cuántos libros compró cada persona.

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration

@Configuration
@ConfigurationProperties(prefix = "test.book")
class BookProperties {
    
    
    lateinit var authors: List<String>
    lateinit var customers: Map<String, Int>
}

El contenido configurado en propiedades es el siguiente

test.book.authors=AAA,BBB,CCC
test.book.customers[tom]=23
test.book.customers[jerry]=20

De esta manera, cuando utiliza el bean BookProperties, puede leer los valores en la lista y el mapa.

2. Contenido de propiedades de la clase estática.

Existe el requisito de asignar el contenido de las propiedades a una clase estática, que solo se cargará una vez. (No entiendo el significado de esto, así que primero cavaré un hoyo)

2.1Java

En Java, podemos escribir así.

import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;

@Data
@RequiredArgsConstructor
@Configuration
public class YYProperties {
    
    

    private final BookProperties bookProperties;
    
    @Getter
    @Setter
    @Configuration
    @ConfigurationProperties(prefix = "test.book")
    public static class BookProperties {
    
    
        private String name;
        private int count;
        private List<String> authors;
        private Map<String, Integer> customers;
    }
}

La configuración del archivo de propiedades es la siguiente:

test.book.name=JAVA
test.book.count=40
test.book.authors=AAA,BBB,CCC
test.book.customers[tom]=12
test.book.customers[jerry]=28

De esta manera, cuando usamos el bean yYProperties, podemos leer el valor de esta variable miembro bookProperties, como

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class YYService {
    
    

    private final YYProperties yyProperties;

    public void hello() {
    
    
        System.out.println(yyProperties.getBookProperties().getAuthors());
        System.out.println(yyProperties.getBookProperties().getName());
        System.out.println(yyProperties.getBookProperties().getCount());
        System.out.println(yyProperties.getBookProperties().getCustomers());
    }
}

2.2 Kotlin

Entonces, ¿se puede escribir así en Kotlin?
Todos sabemos que no hay ningún modificador estático en Kotlin, solo un objeto. Una vez que la clase de objeto se compila en un archivo de clase, se agregará final y la clase modificada por final no se puede agregar con la anotación @Configuration.
Insertar descripción de la imagen aquí

3. Asignar valores a variables estáticas.

A veces solo quiero asignar el valor configurado en propiedades a una variable estática ¿Cómo debo hacer esto?
¿Cuándo surgirá esta necesidad? Por ejemplo, configuro una clave que debe usarse en una clase de utilidad. Esta clase de utilidad no está registrada como un bean y no se le inyecta ningún contenido de clase configurado, por lo que quiero valores de variables estáticas.

3.1Java

3.1.1 Usar la anotación @ConfigurationProperties

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;


@Configuration
@ConfigurationProperties(prefix = "test.book")
public class YYProperties {
    
    

    public static String name;
    public static int count;
    public static List<String> authors;
    public static Map<String, String> customers;

    public void setName(String name) {
    
    
        YYProperties.name = name;
    }

    public void setCount(int count) {
    
    
        YYProperties.count = count;
    }

    public void setAuthors(List<String> authors) {
    
    
        YYProperties.authors = authors;
    }

    public void setCustomers(Map<String, String> customers) {
    
    
        YYProperties.customers = customers;
    }
}

Configurarlo así en propiedades

test.book.name=JAVA
test.book.count=40
test.book.authors=AAA,BBB,CCC
test.book.customers[tom]=12
test.book.customers[jerry]=28

De esta manera puedes usar este valor escrito.

System.out.println(YYProperties.name);
System.out.println(YYProperties.authors);
System.out.println(YYProperties.customers);
System.out.println(YYProperties.count);

El resultado de la impresión es el siguiente:

JAVA
[AAA, BBB, CCC]
{
    
    tom=12, jerry=28}
40

3.1.2 Usar la anotación @Value

Por supuesto, si no usa la anotación @configurationProperties y usa la anotación @Value directamente, ¿qué debe hacer?

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;


@Configuration
//@ConfigurationProperties(prefix = "test.book")
public class YYProperties {
    
    

    public static String name;
    public static int count;
    public static List<String> authors;
    public static Map<String, String> customers;

    @Value("${test.book.name}")
    public void setName(String name) {
    
    
        YYProperties.name = name;
    }

    @Value("${test.book.count}")
    public void setCount(int count) {
    
    
        YYProperties.count = count;
    }

    @Value("${test.book.authors}")
    public void setAuthors(List<String> authors) {
    
    
        YYProperties.authors = authors;
    }

    @Value("#{${test.book.customers}}")
    public void setCustomers(Map<String, String> customers) {
    
    
        YYProperties.customers = customers;
    }
}

Lo que se debe tener en cuenta es la configuración del mapa. La anotación @value está en el método. Al mismo tiempo, se utiliza

#{
    
    ${
    
    test.book.customers}}

Y las propiedades del archivo de configuración también son diferentes.

test.book.name=JAVA
test.book.count=40
test.book.authors=AAA,BBB,CCC
test.book.customers={'a': 'aa', 'b':'bb'}

El resultado de salida es
Insertar descripción de la imagen aquí

3.2 Kotlin

3.2.1 Usar la anotación @ConfigurationProperties

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration

@Configuration
@ConfigurationProperties(prefix = "redmi.book")
class BookProperties {
    
    
    
    fun setName(name: String) {
    
    
        BookProperties.name = name
    }

    fun setAuthors(authors: List<String>) {
    
    
        BookProperties.authors = authors
    }

    fun setCustomers(customers: Map<String, String>) {
    
    
        BookProperties.customers = customers
    }

    companion object {
    
    
        var name: String = ""
        var authors: List<String> = ArrayList()
        var customers: Map<String, String> = HashMap()
    }

}

Simplemente configúrelo así en propiedades.

redmi.book.customers[aa]=AA
redmi.book.customers[bb]=BB
redmi.book.name=lisi
redmi.book.authors=aaa,bbb,ccc

De esta forma, las variables estáticas se pueden llamar directamente en otras clases.

 println(BookProperties.authors)
 println(BookProperties.customers)

El resultado de salida es

[aaa, bbb, ccc]
{
    
    aa=AA, bb=BB}

3.2.2 Usar la anotación @Value


import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration

@Configuration
class BookProperties {
    
    

    @Value("\${redmi.book.name}")
    fun setName(name: String) {
    
    
        BookProperties.name = name
    }

    @Value("\${redmi.book.authors}")
    fun setAuthors(authors: List<String>) {
    
    
        BookProperties.authors = authors
    }

    @Value("#{\${redmi.book.customers}}")
    fun setCustomers(customers: Map<String, String>) {
    
    
        BookProperties.customers = customers
    }

    companion object {
    
    
        var name: String = ""
        var authors: List<String> = ArrayList()
        var customers: Map<String, String> = HashMap()
    }

}

Las propiedades se configuran de la siguiente manera.

redmi.book.customers={
    
    'a': 'aa', 'b': 'bb'}
redmi.book.name=lisi
redmi.book.authors=aaa,bbb,ccc

De esta forma también podrás obtener el valor correspondiente.

Supongo que te gusta

Origin blog.csdn.net/Apple_wolf/article/details/125487543
Recomendado
Clasificación