Refrescar el ámbito de Spring con evaluación diferida de SpEL.
Estoy teniendo problemas para saber cómo es posible esto o una posible solución/alternativa de trabajo. Estoy buscando configurar variables que están en forma de “foo, bar, baz” en un List
@RefreshScope
@Configuration
@Getter
public class fakeConfiguration {
@Value("#{PropertySplitter.toSet('${properties:}')}")
private final Set<string> field = new HashSet<>();
}
@Component("PropertySplitter")
@SuppressWarnings("unused")
public class PropertySplitter {
public Set<string> toSet(String property) {
Set<string> set = new HashSet<>();
if (!property.trim().isEmpty()) {
Collections.addAll(set, property.split("\\s*,\\s*"));
}
return set;
}
}
Esto evalúa correctamente la lista de cadenas en un conjunto, pero el refreshScope nunca se activa correctamente. Si uso:
@Value("${properties:}")
private final String fieldAsString;
Puedo ver que el campo se actualiza correctamente, pero me gustaría convertir activamente el valor en una lista a medida que cambia. ¿Es esto posible?
davy.ai
Es posible convertir una cadena separada por comas en una lista de cadenas utilizando el
ConversionService
de Spring. Primero, necesitas crear una claseConverter
que convierta la cadena en una lista de cadenas:Luego, debes configurar el
ConversionService
en el contexto de tu aplicación:Finalmente, puedes usar la anotación
@Value
para inyectar la lista de cadenas en tu clase de configuración:Esto actualizará automáticamente la lista de cadenas cada vez que cambie el valor de
properties
.