diff --git a/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AnnotationDrivenEventListener.java b/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AnnotationDrivenEventListener.java new file mode 100644 index 000000000000..a766859c93ee --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AnnotationDrivenEventListener.java @@ -0,0 +1,27 @@ +package com.baeldung.springevents.asynchronous; + +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.scheduling.annotation.Async; +import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW; +import com.baeldung.springevents.synchronous.CustomSpringEvent; + +@Component +public class AnnotationDrivenEventListener { + + @EventListener + @Async + public void handleAsyncEvent(CustomSpringEvent event) { + System.out.println("Handle event asynchronously: " + event.getMessage()); + } + + @Async + @Transactional(propagation = REQUIRES_NEW) + @TransactionalEventListener + void handleCustom(CustomSpringEvent event) { + /* … */ + } +} diff --git a/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java b/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java index 085f3b070650..bb77ed23a319 100644 --- a/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java +++ b/spring-core/src/main/java/com/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java @@ -6,7 +6,9 @@ import org.springframework.context.event.ApplicationEventMulticaster; import org.springframework.context.event.SimpleApplicationEventMulticaster; import org.springframework.core.task.SimpleAsyncTaskExecutor; +import org.springframework.scheduling.annotation.EnableAsync; +@EnableAsync @Configuration @ComponentScan("com.baeldung.springevents.synchronous") public class AsynchronousSpringEventsConfig {