Ich habe im Frühjahr Framework-Dokumentation gelesen und fand einen Abschnitt auf Ereignisse im Frühjahr mit ApplicationContext auslösen. Nachdem ich einige Absätze gelesen habe, habe ich festgestellt, dass die Federereignisse synchron ausgelöst werden. Gibt es eine Möglichkeit, asynchrone Ereignisse auszulösen? Deine Hilfe ist sehr Willkommen. Ich suche etwas Ähnliches, das mir helfen würde, mein Modul zu vervollständigen.Spring Framework-Ereignisse
Antwort
Simplest asynchronen ApplicationListener:
Verlag:
@Autowired
private SimpleApplicationEventMulticaster simpleApplicationEventMulticaster;
@Autowired
private AsyncTaskExecutor asyncTaskExecutor;
// ...
simpleApplicationEventMulticaster.setTaskExecutor(asyncTaskExecutor);
// ...
ApplicationEvent event = new ApplicationEvent("");
simpleApplicationEventMulticaster.multicastEvent(event);
Zuhörer:
Sie sollten ApplicationEvent mit Ihren spezifischen Ereignissen ableiten. Sie können SimpleApplicationEventMulticaster und seinen TaksExecutor in einer XML-Datei konfigurieren.
Sie könnten ApplicationEventPublisherAware in Ihrer Listener-Klasse implementieren und ein Quellobjekt (anstelle einer leeren Zeichenfolge) im Ereigniskonstruktor übergeben.
Spring selbst (AFAIK) arbeiten synchron, aber was Sie tun können, ist Ihre eigenen ApplicationListener Proxy erstellen - eine Klasse, die diese Schnittstelle implementiert, aber statt das Ereignis zu delegieren es nur durch Senden an einen anderen (oder neuen) Thread Senden von JMS-Nachrichten usw.
Alternative Benachrichtigungsstrategien können durch Implementieren von ApplicationEventMulticaster
(siehe Javadoc) und der ihr zugrunde liegenden (Hilfs-) Klassenhierarchie erreicht werden. Normalerweise verwenden Sie entweder einen JMS-basierten Benachrichtigungsmechanismus (wie David bereits vorgeschlagen hat) oder hängen Sie an die TaskExecuter
-Abstraktion von Spring an (siehe Javadoc).
Versuchen Sie das ApplicationEventMulticaster Bohne in resources.groovy außer Kraft setzen, so dass es einen Thread-Pool verwendet:
Manche Dinge wie diese für mich gearbeitet, also habe ich
import java.util.concurrent.*
import org.springframework.context.event.*
beans = {
applicationEventMulticaster(SimpleApplicationEventMulticaster) {
taskExecutor = Executors.newCachedThreadPool()
}
}
- 1. Spring-Boot & Spring-Security-Konfiguration
- 2. Spring Social Facebook + Spring Sicherheit
- 3. Testen von Spring @RequestBody mit Spring MockMVC
- 4. Maven Abhängigkeit spring-web vs spring-webmvc
- 5. Spring Boot mit Spring Social Google-Anbieter
- 6. Spring Cloud Config-Client ohne Spring Boot
- 7. Persist Spring Session ohne Spring Security
- 8. Spring Boot Actuator ohne Spring Boot
- 9. Spring-Batch- oder Spring-Boot-Async-Methodenausführung?
- 10. Spring Security Implementierung vorzugsweise ohne Spring Boot
- 11. Dispatching von Spring MVC zu Spring Webflow
- 12. Spring Session Spring Sicherheitsablage API und Redis
- 13. Spring Boot + Spring Security + Hierarchische Rollen
- 14. Spring Cloud & Spring OAuth2 - EnableGlobalMethodSecurity löst AlreadyBuiltException
- 15. Lädt Spring @DirtiesContext den Spring-Kontext neu?
- 16. Resteasy und Spring Integration ohne Spring ContextLoadListener
- 17. Spring-MVC mit Spring-Integration integrieren
- 18. Authentifizierung mit Spring Security + Spring Daten + MongoDB
- 19. Spring Security, Spring MVC und Login-Sitzungen
- 20. Unterschied zwischen Spring und Spring Boot
- 21. Spring Boot + Spring Daten mit mehreren Mandanten
- 22. Spring MockMVC, Spring security und Mockito
- 23. Wo sind Spring-Tutorials ohne Spring-Boot?
- 24. Ist Spring Boot + Spring MVC + Ratpack möglich?
- 25. Spring Integration
- 26. Spring Adotemplate.commandtimeout
- 27. Glassfish + Spring
- 28. Spring Framework
- 29. Spring NoClassDefFoundError
- 30. Ressourcenpaket Spring