Starter for using jOOQ to access SQL databases with JDBC, providing auto-configuration and Spring integration
npx @tessl/cli install tessl/maven-org-springframework-boot--spring-boot-starter-jooq@3.5.0Spring 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 {};
}