From 20003489be86de502c51d6b26bd038cf5507026b Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Fri, 1 Jun 2018 21:01:44 +0300 Subject: [PATCH] Auto-configure jOOQ with TransactionListenerProvider Closes gh-13331 --- .../jooq/JooqAutoConfiguration.java | 11 ++++++++++- .../jooq/JooqAutoConfigurationTests.java | 19 +++++++++++++++++-- .../main/asciidoc/spring-boot-features.adoc | 1 + 3 files changed, 28 insertions(+), 3 deletions(-) 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 bf8052bb99..5a0507ca05 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 @@ -24,6 +24,7 @@ import org.jooq.ExecuteListenerProvider; import org.jooq.RecordListenerProvider; import org.jooq.RecordMapperProvider; import org.jooq.RecordUnmapperProvider; +import org.jooq.TransactionListenerProvider; import org.jooq.TransactionProvider; import org.jooq.VisitListenerProvider; import org.jooq.conf.Settings; @@ -51,6 +52,7 @@ import org.springframework.transaction.PlatformTransactionManager; * * @author Andreas Ahlenstorf * @author Michael Simons + * @author Dmytro Nosan * @since 1.3.0 */ @Configuration @@ -105,6 +107,8 @@ public class JooqAutoConfiguration { private final VisitListenerProvider[] visitListenerProviders; + private final TransactionListenerProvider[] transactionListenerProviders; + public DslContextConfiguration(JooqProperties properties, ConnectionProvider connectionProvider, DataSource dataSource, ObjectProvider transactionProvider, @@ -113,7 +117,8 @@ public class JooqAutoConfiguration { ObjectProvider settings, ObjectProvider recordListenerProviders, ExecuteListenerProvider[] executeListenerProviders, - ObjectProvider visitListenerProviders) { + ObjectProvider visitListenerProviders, + ObjectProvider transactionListenerProviders) { this.properties = properties; this.connection = connectionProvider; this.dataSource = dataSource; @@ -124,6 +129,8 @@ public class JooqAutoConfiguration { this.recordListenerProviders = recordListenerProviders.getIfAvailable(); this.executeListenerProviders = executeListenerProviders; this.visitListenerProviders = visitListenerProviders.getIfAvailable(); + this.transactionListenerProviders = transactionListenerProviders + .getIfAvailable(); } @Bean @@ -152,6 +159,8 @@ public class JooqAutoConfiguration { configuration.set(this.recordListenerProviders); configuration.set(this.executeListenerProviders); configuration.set(this.visitListenerProviders); + configuration + .setTransactionListenerProvider(this.transactionListenerProviders); 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 e7c99e81f8..e968651d36 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 @@ -30,6 +30,8 @@ import org.jooq.RecordType; import org.jooq.RecordUnmapper; import org.jooq.RecordUnmapperProvider; import org.jooq.SQLDialect; +import org.jooq.TransactionListener; +import org.jooq.TransactionListenerProvider; import org.jooq.TransactionalRunnable; import org.jooq.VisitListener; import org.jooq.VisitListenerProvider; @@ -56,6 +58,7 @@ import static org.junit.Assert.fail; * @author Phillip Webb * @author Andy Wilkinson * @author Stephane Nicoll + * @author Dmytro Nosan */ public class JooqAutoConfigurationTests { @@ -137,8 +140,8 @@ public class JooqAutoConfigurationTests { this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class, TxManagerConfiguration.class, TestRecordMapperProvider.class, TestRecordUnmapperProvider.class, TestRecordListenerProvider.class, - TestExecuteListenerProvider.class, TestVisitListenerProvider.class) - .run((context) -> { + TestExecuteListenerProvider.class, TestVisitListenerProvider.class, + TestTransactionListenerProvider.class).run((context) -> { DSLContext dsl = context.getBean(DSLContext.class); assertThat(dsl.configuration().recordMapperProvider().getClass()) .isEqualTo(TestRecordMapperProvider.class); @@ -150,6 +153,8 @@ public class JooqAutoConfigurationTests { .isEqualTo(2); assertThat(dsl.configuration().visitListenerProviders().length) .isEqualTo(1); + assertThat(dsl.configuration().transactionListenerProviders().length) + .isEqualTo(1); }); } @@ -273,4 +278,14 @@ public class JooqAutoConfigurationTests { } + protected static class TestTransactionListenerProvider + implements TransactionListenerProvider { + + @Override + public TransactionListener provide() { + return null; + } + + } + } diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 1682129759..93c6ed91cc 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -3777,6 +3777,7 @@ following jOOQ Types: * `RecordListenerProvider` * `ExecuteListenerProvider` * `VisitListenerProvider` +* `TransactionListenerProvider` You can also create your own `org.jooq.Configuration` `@Bean` if you want to take complete control of the jOOQ configuration.