diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfiguration.java index 4386044baf..72944ddf3f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfiguration.java @@ -87,11 +87,13 @@ public class JooqAutoConfiguration { @Bean @ConditionalOnMissingBean(org.jooq.Configuration.class) public DefaultConfiguration jooqConfiguration(JooqProperties properties, ConnectionProvider connectionProvider, - DataSource dataSource, ObjectProvider executeListenerProviders, + DataSource dataSource, ObjectProvider transactionProvider, + ObjectProvider executeListenerProviders, ObjectProvider configurationCustomizers) { DefaultConfiguration configuration = new DefaultConfiguration(); configuration.set(properties.determineSqlDialect(dataSource)); configuration.set(connectionProvider); + transactionProvider.ifAvailable(configuration::set); configuration.set(executeListenerProviders.orderedStream().toArray(ExecuteListenerProvider[]::new)); configurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration)); return configuration; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java index c2b722ec9a..6d608d69af 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java @@ -113,6 +113,17 @@ class JooqAutoConfigurationTests { }); } + @Test + void jooqWithDefaultTransactionProvider() { + this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class, TxManagerConfiguration.class) + .run((context) -> { + DSLContext dsl = context.getBean(DSLContext.class); + TransactionProvider expectedTransactionProvider = context.getBean(TransactionProvider.class); + TransactionProvider transactionProvider = dsl.configuration().transactionProvider(); + assertThat(transactionProvider).isSameAs(expectedTransactionProvider); + }); + } + @Test void jooqWithDefaultExecuteListenerProvider() { this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class).run((context) -> { @@ -164,6 +175,19 @@ class JooqAutoConfigurationTests { .run((context) -> { TransactionProvider transactionProvider = context.getBean(TransactionProvider.class); assertThat(transactionProvider).isInstanceOf(CustomTransactionProvider.class); + DSLContext dsl = context.getBean(DSLContext.class); + assertThat(dsl.configuration().transactionProvider()).isSameAs(transactionProvider); + }); + } + + @Test + void transactionProviderFromConfigurationCustomizerOverridesTransactionProviderBean() { + this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class, TxManagerConfiguration.class, + CustomTransactionProviderFromCustomizerConfiguration.class).run((context) -> { + TransactionProvider transactionProvider = context.getBean(TransactionProvider.class); + assertThat(transactionProvider).isInstanceOf(SpringTransactionProvider.class); + DSLContext dsl = context.getBean(DSLContext.class); + assertThat(dsl.configuration().transactionProvider()).isInstanceOf(CustomTransactionProvider.class); }); } @@ -228,6 +252,16 @@ class JooqAutoConfigurationTests { } + @Configuration(proxyBeanMethods = false) + static class CustomTransactionProviderFromCustomizerConfiguration { + + @Bean + DefaultConfigurationCustomizer transactionProviderCustomizer() { + return (configuration) -> configuration.setTransactionProvider(new CustomTransactionProvider()); + } + + } + @Configuration(proxyBeanMethods = false) static class TxManagerConfiguration {