GH-858 - Allow customizing transaction propagation on @ApplicationModuleListener.

This commit is contained in:
Oliver Drotbohm
2024-10-06 12:44:01 +02:00
parent d6feb70752
commit d510697afa
2 changed files with 23 additions and 0 deletions

View File

@@ -76,4 +76,13 @@ public @interface ApplicationModuleListener {
*/
@AliasFor(annotation = EventListener.class, attribute = "condition")
String condition() default "";
/**
* The transaction propagation type. Defaults to {@link Propagation#REQUIRES_NEW}
*
* @since 1.3
* @see Transactional#propagation()
*/
@AliasFor(annotation = Transactional.class, attribute = "propagation")
Propagation propagation() default Propagation.REQUIRES_NEW;
}

View File

@@ -23,6 +23,8 @@ import org.junit.jupiter.api.Test;
import org.springframework.context.event.ApplicationListenerMethodAdapter;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* Unit tests for {@link ApplicationModuleListener}.
@@ -50,10 +52,22 @@ class ApplicationModuleListenerUnitTests {
assertThat(adapter.getCondition()).isEqualTo("#{false}");
}
@Test // GH-858
void declaresCustomTransactionPropagation() throws Exception {
var method = Sample.class.getDeclaredMethod("withCustomPropagation");
var annotation = findMergedAnnotation(method, Transactional.class);
assertThat(annotation.propagation()).isEqualTo(Propagation.SUPPORTS);
}
static class Sample {
@ApplicationModuleListener(condition = "#{false}")
void someMethod(Object event) {}
@ApplicationModuleListener(propagation = Propagation.SUPPORTS)
void withCustomPropagation() {}
}
static class CustomAdapter extends ApplicationListenerMethodAdapter {