Skip to content

Commit d510697

Browse files
committed
GH-858 - Allow customizing transaction propagation on @ApplicationModuleListener.
1 parent d6feb70 commit d510697

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

spring-modulith-events/spring-modulith-events-api/src/main/java/org/springframework/modulith/events/ApplicationModuleListener.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,13 @@
7676
*/
7777
@AliasFor(annotation = EventListener.class, attribute = "condition")
7878
String condition() default "";
79+
80+
/**
81+
* The transaction propagation type. Defaults to {@link Propagation#REQUIRES_NEW}
82+
*
83+
* @since 1.3
84+
* @see Transactional#propagation()
85+
*/
86+
@AliasFor(annotation = Transactional.class, attribute = "propagation")
87+
Propagation propagation() default Propagation.REQUIRES_NEW;
7988
}

spring-modulith-events/spring-modulith-events-api/src/test/java/org/springframework/modulith/events/ApplicationModuleListenerUnitTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.springframework.context.event.ApplicationListenerMethodAdapter;
2424
import org.springframework.context.event.EventListener;
2525
import org.springframework.core.annotation.AnnotatedElementUtils;
26+
import org.springframework.transaction.annotation.Propagation;
27+
import org.springframework.transaction.annotation.Transactional;
2628

2729
/**
2830
* Unit tests for {@link ApplicationModuleListener}.
@@ -50,10 +52,22 @@ void exposesConditionToAdapter() throws Exception {
5052
assertThat(adapter.getCondition()).isEqualTo("#{false}");
5153
}
5254

55+
@Test // GH-858
56+
void declaresCustomTransactionPropagation() throws Exception {
57+
58+
var method = Sample.class.getDeclaredMethod("withCustomPropagation");
59+
var annotation = findMergedAnnotation(method, Transactional.class);
60+
61+
assertThat(annotation.propagation()).isEqualTo(Propagation.SUPPORTS);
62+
}
63+
5364
static class Sample {
5465

5566
@ApplicationModuleListener(condition = "#{false}")
5667
void someMethod(Object event) {}
68+
69+
@ApplicationModuleListener(propagation = Propagation.SUPPORTS)
70+
void withCustomPropagation() {}
5771
}
5872

5973
static class CustomAdapter extends ApplicationListenerMethodAdapter {

0 commit comments

Comments
 (0)