Bueno, puede ser útil para realizar una recarga tal contexto, mientras que las pruebas de su aplicación.
Puede probar el método refresh
de una de las clases AbstractRefreshableApplicationContext
: no actualizará sus beans instanciados previamente, pero la próxima llamada en el contexto devolverá los beans actualizados.
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class ReloadSpringContext {
final static String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE beans PUBLIC \"-//SPRING//DTD BEAN//EN\"\n" +
" \t\"http://www.springframework.org/dtd/spring-beans.dtd\">\n";
final static String contextA =
"<beans><bean id=\"test\" class=\"java.lang.String\">\n" +
"\t\t<constructor-arg value=\"fromContextA\"/>\n" +
"</bean></beans>";
final static String contextB =
"<beans><bean id=\"test\" class=\"java.lang.String\">\n" +
"\t\t<constructor-arg value=\"fromContextB\"/>\n" +
"</bean></beans>";
public static void main(String[] args) throws IOException {
//create a single context file
final File contextFile = File.createTempFile("testSpringContext", ".xml");
//write the first context into it
FileUtils.writeStringToFile(contextFile, header + contextA);
//create a spring context
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(
new String[]{contextFile.getPath()}
);
//echo the bean 'test' on stdout
System.out.println(context.getBean("test"));
//write the second context into it
FileUtils.writeStringToFile(contextFile, header + contextB);
//refresh the context
context.refresh();
//echo the bean 'test' on stdout
System.out.println(context.getBean("test"));
}
}
Y se obtiene este resultado
fromContextA
fromContextB
Otra forma de lograr esto (y tal vez una más sencilla) es usar la función Refreshable frijol de primavera 2.5+ Con lenguaje dinámico (maravilloso, etc) y la primavera, incluso puede cambiar su comportamiento de frijol. Eche un vistazo al spring reference for dynamic language:
24.3.1.2. habas actualizables
Uno de los (si no el) más valor convincente añade la dinámica de apoyo lengua en la primavera es la característica 'frijol actualizable'.
Un grano de refreshable es un bean -idioma respaldados dinámico que con una pequeña cantidad de configuración, un dinámico-idioma respaldados bean puede cambios del monitor en su recurso de archivo fuente subyacente, y después recargar sí cuando se cambia el archivo fuente del lenguaje dinámica (por ejemplo, cuando un ediciones de desarrollo y ahorra cambios en el archivo en el sistema de archivos ).
Esto fue adaptado en https://github.com/Unicon/springframework-addons/wiki/Auto-reloading-properties-files – Vadzim
Enlaces actualizados: http://maven-repository.com/artifact/net.unicon. springframework/springframework-addons/0.1, https://github.com/UniconLabs/springframework-addons/blob/master/src/main/java/net/unicon/springframework/addons/properties/ReloadingPropertyPlaceholderConfigurer.java, https: // github.com/knightliao/disconf/blob/master/disconf-client/src/main/java/com/baidu/disconf/client/addons/properties/ReloadingPropertyPlaceholderConfigurer.java – Vadzim