Skip to content

Commit 6806276

Browse files
committed
Retain jOOQ configuration bean when used defines a DSLContext bean
Closes gh-42400
1 parent 97ff6e2 commit 6806276

File tree

2 files changed

+35
-24
lines changed

2 files changed

+35
-24
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfiguration.java

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
3838
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3939
import org.springframework.context.annotation.Bean;
40-
import org.springframework.context.annotation.Configuration;
4140
import org.springframework.core.annotation.Order;
4241
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
4342
import org.springframework.transaction.PlatformTransactionManager;
@@ -53,6 +52,7 @@
5352
@AutoConfiguration(after = { DataSourceAutoConfiguration.class, TransactionAutoConfiguration.class })
5453
@ConditionalOnClass(DSLContext.class)
5554
@ConditionalOnBean(DataSource.class)
55+
@EnableConfigurationProperties(JooqProperties.class)
5656
public class JooqAutoConfiguration {
5757

5858
@Bean
@@ -81,31 +81,25 @@ public ExceptionTranslatorExecuteListener jooqExceptionTranslator() {
8181
return ExceptionTranslatorExecuteListener.DEFAULT;
8282
}
8383

84-
@Configuration(proxyBeanMethods = false)
84+
@Bean
8585
@ConditionalOnMissingBean(DSLContext.class)
86-
@EnableConfigurationProperties(JooqProperties.class)
87-
public static class DslContextConfiguration {
88-
89-
@Bean
90-
public DefaultDSLContext dslContext(org.jooq.Configuration configuration) {
91-
return new DefaultDSLContext(configuration);
92-
}
93-
94-
@Bean
95-
@ConditionalOnMissingBean(org.jooq.Configuration.class)
96-
public DefaultConfiguration jooqConfiguration(JooqProperties properties, ConnectionProvider connectionProvider,
97-
DataSource dataSource, ObjectProvider<TransactionProvider> transactionProvider,
98-
ObjectProvider<ExecuteListenerProvider> executeListenerProviders,
99-
ObjectProvider<DefaultConfigurationCustomizer> configurationCustomizers) {
100-
DefaultConfiguration configuration = new DefaultConfiguration();
101-
configuration.set(properties.determineSqlDialect(dataSource));
102-
configuration.set(connectionProvider);
103-
transactionProvider.ifAvailable(configuration::set);
104-
configuration.set(executeListenerProviders.orderedStream().toArray(ExecuteListenerProvider[]::new));
105-
configurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration));
106-
return configuration;
107-
}
86+
public DefaultDSLContext dslContext(org.jooq.Configuration configuration) {
87+
return new DefaultDSLContext(configuration);
88+
}
10889

90+
@Bean
91+
@ConditionalOnMissingBean(org.jooq.Configuration.class)
92+
public DefaultConfiguration jooqConfiguration(JooqProperties properties, ConnectionProvider connectionProvider,
93+
DataSource dataSource, ObjectProvider<TransactionProvider> transactionProvider,
94+
ObjectProvider<ExecuteListenerProvider> executeListenerProviders,
95+
ObjectProvider<DefaultConfigurationCustomizer> configurationCustomizers) {
96+
DefaultConfiguration configuration = new DefaultConfiguration();
97+
configuration.set(properties.determineSqlDialect(dataSource));
98+
configuration.set(connectionProvider);
99+
transactionProvider.ifAvailable(configuration::set);
100+
configuration.set(executeListenerProviders.orderedStream().toArray(ExecuteListenerProvider[]::new));
101+
configurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration));
102+
return configuration;
109103
}
110104

111105
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.jooq.TransactionProvider;
3030
import org.jooq.TransactionalRunnable;
3131
import org.jooq.impl.DataSourceConnectionProvider;
32+
import org.jooq.impl.DefaultDSLContext;
3233
import org.jooq.impl.DefaultExecuteListenerProvider;
3334
import org.junit.jupiter.api.Test;
3435

@@ -214,6 +215,12 @@ void transactionProviderFromConfigurationCustomizerOverridesTransactionProviderB
214215
});
215216
}
216217

218+
@Test
219+
void autoConfiguredJooqConfigurationCanBeUsedToCreateCustomDslContext() {
220+
this.contextRunner.withUserConfiguration(CustomDslContextConfiguration.class, JooqDataSourceConfiguration.class)
221+
.run((context) -> assertThat(context).hasSingleBean(DSLContext.class).hasBean("customDslContext"));
222+
}
223+
217224
static class AssertFetch implements TransactionalRunnable {
218225

219226
private final DSLContext dsl;
@@ -305,6 +312,16 @@ PlatformTransactionManager transactionManager(DataSource dataSource) {
305312

306313
}
307314

315+
@Configuration(proxyBeanMethods = false)
316+
static class CustomDslContextConfiguration {
317+
318+
@Bean
319+
DSLContext customDslContext(org.jooq.Configuration configuration) {
320+
return new DefaultDSLContext(configuration);
321+
}
322+
323+
}
324+
308325
@Order(100)
309326
static class TestExecuteListenerProvider implements ExecuteListenerProvider {
310327

0 commit comments

Comments
 (0)