es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring-boot: Referenciando un valor de lista dentro de otra propiedad

Me gustaría poder usar un valor dentro de mi lista como clave para mi mapa con las propiedades de Spring Boot. ¿Es esto posible?

Soy nuevo en spring-boot y estoy usando @ConfigurationProperties. Tengo una clase de propiedades como se muestra a continuación:

@Data
@ConfigurationProperties(prefix = “test”)
public class TestProperties{
private List tableNames;
private Map<string, string=””> fieldNames;
}

application.properties

test.table-names[0]=car.information.table

Me gustaría hacer algo como esto, pero obtengo el siguiente error:

No se puede utilizar la navegación ‘[..]’ para la propiedad ‘test.field-names.$(test.table-names’ de tipo java.lang.String

test.field-names.${test.table-names[0]}=Id,Model,Make,Year

Por ahora, tengo una solución alternativa como esta:

test.field-names.car.information.table=Id,Model,Make,Year

¿Es posible hacer referencia a un valor de lista como clave para otra propiedad dentro de application.properties?</string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacer referencia a un valor de lista como clave de otra propiedad dentro de application.properties en Spring Boot. En el ejemplo proporcionado, la solución alternativa para escapar los puntos en el valor de la lista y usarlo como clave para la propiedad fieldNames del mapa no es elegante. En su lugar, podemos usar la sintaxis de SpEL (Spring Expression Language) para lograr esto.

    Podemos modificar la clase TestProperties de la siguiente manera:

    @Data
    @ConfigurationProperties(prefix = "test")
    public class TestProperties{
       private List<string> tableNames;
       private Map<string, string=""> fieldNames;
    
       @PostConstruct
       public void init() {
          //poblar el mapa fieldNames usando la lista tableNames como claves
          for (String tableName : tableNames) {
             fieldNames.put(tableName, "valor"); //reemplazar "valor" con el valor deseado
          }
       }
    }
    

    Luego, en el archivo application.properties, podemos usar SpEL para hacer referencia al valor de la lista como clave para la propiedad fieldNames del mapa:

    test.table-names[0]=car.information.table
    test.field-names["${test.table-names[0]}"]=Id,Modelo,Fabricante,Año
    

    Con este enfoque, podemos evitar la necesidad de escapar caracteres en los valores de la lista y mantener un archivo de configuración más limpio y legible.</string,>

Comments are closed.