GH-858 - Allow customizing transaction propagation on @ApplicationModuleListener.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user