Starter for using jOOQ to access SQL databases with JDBC, providing auto-configuration and Spring integration
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Spring Boot Starter for jOOQ provides seamless integration between Spring Boot and jOOQ (Java Object Oriented Querying), a type-safe SQL query builder. This starter automatically configures jOOQ components, integrates with Spring's transaction management, and provides exception translation to Spring's DataAccessException hierarchy.
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
<version>3.5.3</version>
</dependency>Gradle:
implementation 'org.springframework.boot:spring-boot-starter-jooq:3.5.3'import org.jooq.DSLContext;
import org.jooq.Configuration;
import org.springframework.boot.autoconfigure.jooq.*;For configuration properties:
import org.springframework.boot.context.properties.ConfigurationProperties;import org.jooq.DSLContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Autowired
private DSLContext dsl;
@Transactional
public List<User> findActiveUsers() {
return dsl.selectFrom(USER)
.where(USER.ACTIVE.eq(true))
.fetchInto(User.class);
}
@Transactional
public void createUser(String name, String email) {
dsl.insertInto(USER)
.set(USER.NAME, name)
.set(USER.EMAIL, email)
.set(USER.ACTIVE, true)
.execute();
}
}Spring Boot Starter jOOQ is built around several key components:
JooqAutoConfiguration automatically configures jOOQ components based on available beans and propertiesPlatformTransactionManager through SpringTransactionProviderDataAccessException hierarchyDataSourceDefaultConfigurationCustomizer beans and external configuration filesCore auto-configuration that sets up jOOQ beans automatically based on your Spring Boot application configuration. Provides the main DSLContext and Configuration beans, and ensures proper database initialization ordering.
@AutoConfiguration
@ConditionalOnClass(DSLContext.class)
@ConditionalOnBean(DataSource.class)
@EnableConfigurationProperties(JooqProperties.class)
public class JooqAutoConfiguration {
@Bean
@ConditionalOnMissingBean(DSLContext.class)
public DefaultDSLContext dslContext(org.jooq.Configuration configuration);
@Bean
@ConditionalOnMissingBean(org.jooq.Configuration.class)
DefaultConfiguration jooqConfiguration(JooqProperties properties,
ConnectionProvider connectionProvider,
DataSource dataSource,
ObjectProvider<TransactionProvider> transactionProvider,
ObjectProvider<ExecuteListenerProvider> executeListenerProviders,
ObjectProvider<DefaultConfigurationCustomizer> configurationCustomizers,
ObjectProvider<Settings> settingsProvider);
}Configuration properties for customizing jOOQ behavior through Spring Boot's external configuration.
@ConfigurationProperties("spring.jooq")
public class JooqProperties {
private SQLDialect sqlDialect;
private Resource config;
public SQLDialect getSqlDialect();
public void setSqlDialect(SQLDialect sqlDialect);
public Resource getConfig();
public void setConfig(Resource config);
public SQLDialect determineSqlDialect(DataSource dataSource);
}Integration with Spring's transaction management system, allowing jOOQ operations to participate in Spring-managed transactions.
public class SpringTransactionProvider implements TransactionProvider {
public SpringTransactionProvider(PlatformTransactionManager transactionManager);
public void begin(TransactionContext context);
public void commit(TransactionContext ctx);
public void rollback(TransactionContext ctx);
}Automatic translation of jOOQ and JDBC exceptions to Spring's DataAccessException hierarchy for consistent error handling.
public interface ExceptionTranslatorExecuteListener extends ExecuteListener {
ExceptionTranslatorExecuteListener DEFAULT = new DefaultExceptionTranslatorExecuteListener();
static ExceptionTranslatorExecuteListener of(
Function<ExecuteContext, SQLExceptionTranslator> translatorFactory);
}Testing support for jOOQ-based components with slice testing capabilities that focus only on jOOQ components while providing embedded database support.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@BootstrapWith(JooqTestContextBootstrapper.class)
@ExtendWith(SpringExtension.class)
@Transactional
@AutoConfigureJooq
public @interface JooqTest {
String[] properties() default {};
boolean useDefaultFilters() default true;
Filter[] includeFilters() default {};
Filter[] excludeFilters() default {};
Class<?>[] excludeAutoConfiguration() default {};
}