Hola, quiero usar @PropertySource en primavera para un recurso personalizado, es decir, diga xyz: //path/x.txt en lugar de protocolos estándar como el archivo classpath, etc., que ya es compatible. He encontrado una manera de hacer lo mismo en primavera Arranque que es por SpringApplication como se muestra a continuación con un ResourceLoader personalizado

 protected WebApplicationContext run(SpringApplication app){
  app.setResourceLoader(new MyCustomResourceLoader);
  return (WebApplicationContext )app.run();
 }

Lo mismo funciona bien y ahora puedo definir propertySource como @PropertySource ("xyz: //path/y.txt"). Pero no pude averiguar cómo anular / personalizar lo mismo en una aplicación de primavera normal. probando formas usando ResourceLoaderAware y BeanPostProcessor pero no pude resolverlo.

Alguna ayuda ..

ACTUALIZAR Cosas que haré en mi ResourceLoader personalizado

public Class CustomResourceLoader extends DefaultResourceLoader{

@Override
public Resource getResource(String location){
if(location.startsWith("xyz://"){
return new XYZResource(new URI(location));
}
return super.getResource(location);
}

Ahora solo necesito una forma de decirle a Spring que use esto en lugar del cargador de recursos predeterminado, es posible, como mencioné en el arranque de SPring, pero necesito descubrir cómo hacerlo en Spring puro.

0
Gaurav Rawat 28 ene. 2016 a las 19:34

2 respuestas

La mejor respuesta

Gracias a @ chris-beams, que dio una solución. Resumiendo, se requieren los siguientes cambios:

Extienda AnnotationConfigWebApplicationContext y anule su método getResource utilizando su cargador de recursos personalizado como se muestra a continuación

   @Override
   public Resource getResource(String location)
   {
      ResourceLoader loader = SingletongINSTANCE.getCustomResourceLoader();
      return loader.getResource(location);
   }

Esto se puede hacer utilizando la entrada personalizada AnnotationConfigWebApplicationContext en web.xml o mediante WebApplicationInitializer.

También para un soporte más conveniente para los cargadores de recursos personalizados generados https://jira.spring.io/browse/SPR -13905

0
Konstantin Konyshev 26 ago. 2016 a las 11:42

Eche un vistazo a ConfigurableEnvironment, donde encontrará asistencia de primera clase para registrar y solicitar instancias PropertySource personalizadas:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ConfigurableEnvironment.html

1
Chris Beams 28 ene. 2016 a las 18:52