Skip to content

Commit d2a6a73

Browse files
committed
Apply TransactionManagerCustomizers consistently for Pulsar
Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1 parent b9010e5 commit d2a6a73

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

‎module/spring-boot-pulsar/src/main/java/org/springframework/boot/pulsar/autoconfigure/PulsarAutoConfiguration.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.boot.pulsar.autoconfigure.PulsarProperties.Defaults.SchemaInfo;
3131
import org.springframework.boot.pulsar.autoconfigure.PulsarProperties.Defaults.TypeMapping;
3232
import org.springframework.boot.thread.Threading;
33+
import org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizers;
3334
import org.springframework.boot.util.LambdaSafe;
3435
import org.springframework.context.annotation.Bean;
3536
import org.springframework.context.annotation.Configuration;
@@ -80,6 +81,7 @@
8081
* @author Alexander Preuß
8182
* @author Phillip Webb
8283
* @author Jonas Geiregat
84+
* @author Yanming Zhou
8385
* @since 4.0.0
8486
*/
8587
@AutoConfiguration
@@ -303,8 +305,11 @@ DefaultPulsarConsumerFactory<?> pulsarConsumerFactory(PulsarClient pulsarClient,
303305
@Bean
304306
@ConditionalOnMissingBean(PulsarAwareTransactionManager.class)
305307
@ConditionalOnBooleanProperty("spring.pulsar.transaction.enabled")
306-
PulsarTransactionManager pulsarTransactionManager(PulsarClient pulsarClient) {
307-
return new PulsarTransactionManager(pulsarClient);
308+
PulsarTransactionManager pulsarTransactionManager(PulsarClient pulsarClient,
309+
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
310+
PulsarTransactionManager pulsarTransactionManager = new PulsarTransactionManager(pulsarClient);
311+
transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(pulsarTransactionManager));
312+
return pulsarTransactionManager;
308313
}
309314

310315
@SuppressWarnings("unchecked")

‎module/spring-boot-pulsar/src/test/java/org/springframework/boot/pulsar/autoconfigure/PulsarAutoConfigurationTests.java‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.boot.test.context.FilteredClassLoader;
4141
import org.springframework.boot.test.context.TestConfiguration;
4242
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
43+
import org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration;
4344
import org.springframework.context.annotation.Bean;
4445
import org.springframework.context.annotation.Configuration;
4546
import org.springframework.core.annotation.Order;
@@ -78,7 +79,9 @@
7879
import org.springframework.pulsar.function.PulsarFunctionAdministration;
7980
import org.springframework.pulsar.listener.PulsarContainerProperties.TransactionSettings;
8081
import org.springframework.pulsar.transaction.PulsarAwareTransactionManager;
82+
import org.springframework.pulsar.transaction.PulsarTransactionManager;
8183
import org.springframework.test.util.ReflectionTestUtils;
84+
import org.springframework.transaction.TransactionExecutionListener;
8285

8386
import static org.assertj.core.api.Assertions.assertThat;
8487
import static org.mockito.BDDMockito.given;
@@ -92,6 +95,7 @@
9295
* @author Alexander Preuß
9396
* @author Soby Chacko
9497
* @author Phillip Webb
98+
* @author Yanming Zhou
9599
*/
96100
class PulsarAutoConfigurationTests {
97101

@@ -173,6 +177,18 @@ void whenHasUserDefinedContainerFactoryCustomizersBeanDoesNotAutoConfigureBean()
173177
.isSameAs(customizers));
174178
}
175179

180+
@Test
181+
void pulsarTransactionManagerWithTransactionExecutionListenersIsConfigured() {
182+
TransactionExecutionListener listener = mock(TransactionExecutionListener.class);
183+
this.contextRunner.withPropertyValues("spring.pulsar.transaction.enabled=true")
184+
.withConfiguration(AutoConfigurations.of(TransactionManagerCustomizationAutoConfiguration.class))
185+
.withBean(TransactionExecutionListener.class, () -> listener)
186+
.run((context) -> {
187+
PulsarTransactionManager transactionManager = context.getBean(PulsarTransactionManager.class);
188+
assertThat(transactionManager.getTransactionExecutionListeners()).containsExactly(listener);
189+
});
190+
}
191+
176192
@Nested
177193
class ClientTests {
178194

0 commit comments

Comments
 (0)