Estaba leyendo la documentación de spring framework y encontré una sección sobre cómo generar eventos en Spring utilizando ApplicationContext. Después de leer algunos párrafos, descubrí que los eventos de primavera se desarrollan sincrónicamente. ¿Hay alguna forma de generar eventos asincrónicos? su ayuda es muy apreciada. Estoy buscando algo similar que me ayudaría a completar mi módulo.Eventos de Spring Framework
Respuesta
más simple ApplicationListener asíncrono:
Editorial:
@Autowired
private SimpleApplicationEventMulticaster simpleApplicationEventMulticaster;
@Autowired
private AsyncTaskExecutor asyncTaskExecutor;
// ...
simpleApplicationEventMulticaster.setTaskExecutor(asyncTaskExecutor);
// ...
ApplicationEvent event = new ApplicationEvent("");
simpleApplicationEventMulticaster.multicastEvent(event);
Oyente:
@Component
static class MyListener implements ApplicationListener<ApplicationEvent>
public void onApplicationEvent(ApplicationEvent event) {
// do stuff, typically check event subclass (instanceof) to know which action to perform
}
}
Debe aplicar la subclase ApplicationEvent con sus eventos específicos. Puede configurar SimpleApplicationEventMulticaster y su taksExecutor en un archivo xml.
Es posible que desee implementar ApplicationEventPublisherAware en su clase de escucha y pasar un objeto de origen (en lugar de cadena vacía) en el constructor de eventos.
El resorte en sí (AFAIK) funciona sincrónicamente, pero lo que puede hacer es crear su propio proxy ApplicationListener - una clase que implementa esta interfaz pero en vez de manejar el evento simplemente lo delega enviando a otro (o nuevo) hilo , enviando mensajes JMS, etc.
Se pueden lograr estrategias de notificación alternativas implementando ApplicationEventMulticaster
(ver Javadoc) y su jerarquía de clases subyacente (auxiliar). Normalmente, utiliza un mecanismo de notificación basado en JMS (como ya sugirió David) o se adjunta a la abstracción de Spring TaskExecuter
(consulte Javadoc).
Prueba esto anula el grano ApplicationEventMulticaster en resources.groovy para que utilice un grupo de subprocesos:
algo como esto funcionó para mí, es decir, utilicé
import java.util.concurrent.*
import org.springframework.context.event.*
beans = {
applicationEventMulticaster(SimpleApplicationEventMulticaster) {
taskExecutor = Executors.newCachedThreadPool()
}
}
- 1. Spring Framework name background
- 2. Spring Framework en términos simples
- 3. Actualizado Spring MVC Framework Tutorial
- 4. Quartz JobStore con Spring Framework
- 5. Ventaja de usar Spring roo over play framework (si usamos Spring framework)?
- 6. Spring Framework Conexión de JVM entre sí
- 7. spring-webmvc.jar no viene con Spring Framework 3.0.5 descarga
- 8. Despacho de eventos personalizados con Dojo framework
- 9. Spring Framework MVC Base Controller Método
- 10. Java: Spring Framework: Declarar anidadas Mapas
- 11. Spring Framework filtro, haba no inyecta
- 12. Spring Framework, habilite el método PUT
- 13. ¿Crear la tarea Spring Framework programmatically?
- 14. Eventos personalizados en Node.js con Express framework
- 15. Eventos en la aplicación Zend Framework
- 16. ¿Qué patrones de diseño se usan en Spring framework?
- 17. Cadena de consulta es decodificada por Spring Framework
- 18. Descripción de Spring Framework básico y flujo total
- 19. Uso correcto de LOG4J en Spring Framework Via DI
- 20. Ejemplos de sitios web creados con Spring, Play Framework, Struts
- 21. ¿Se puede utilizar Spring Framework para aplicaciones por lotes?
- 22. Diferencia entre applicationContext.xml y primavera-servlet.xml en Spring Framework
- 23. ¿Alguien usa Java-config para Spring framework ahora?
- 24. ¿Cómo buscar la cadena LIKE 'something%' con Java Spring Framework?
- 25. Obteniendo 'Búsqueda con nombre no encontrada' con Spring framework
- 26. paso a paso Ejemplo JMS en Spring Framework
- 27. ¿Qué IDE para la aplicación web Spring Framework?
- 28. Internals of Spring Framework y otros contenedores IoC
- 29. Anotaciones de Spring Spring @RequestMapping
- 30. ¿Cómo se compara Spring para Python con Spring para Java?