or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

database-configuration.mddatabase-initialization.mdindex.mdmysql-container.mdprovider-pattern.mdr2dbc-integration.md
tile.json

tessl/maven-org-testcontainers--mysql

Testcontainers MySQL module for creating throwaway MySQL database containers for Java integration testing

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.testcontainers/mysql@1.21.x

To install, run

npx @tessl/cli install tessl/maven-org-testcontainers--mysql@1.21.0

index.mddocs/

Testcontainers MySQL

Testcontainers MySQL provides a MySQL database container implementation for the Testcontainers framework, enabling developers to easily spin up throwaway MySQL database instances for integration testing in Java applications. The module offers comprehensive MySQL-specific configuration options, automatic JDBC URL construction, driver detection, and seamless integration with JUnit test frameworks.

Package Information

  • Package Name: org.testcontainers:mysql
  • Package Type: Maven/Gradle dependency
  • Language: Java
  • Installation:
    • Maven: <dependency><groupId>org.testcontainers</groupId><artifactId>mysql</artifactId><version>1.21.3</version></dependency>
    • Gradle: implementation 'org.testcontainers:mysql:1.21.3'

Core Imports

import org.testcontainers.containers.MySQLContainer;

For provider-based usage:

import org.testcontainers.containers.MySQLContainerProvider;

For R2DBC reactive database access:

import org.testcontainers.containers.MySQLR2DBCDatabaseContainer;
import org.testcontainers.containers.MySQLR2DBCDatabaseContainerProvider;

Basic Usage

import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.utility.DockerImageName;

// Create MySQL container with specific image
MySQLContainer<?> mysql = new MySQLContainer<>(DockerImageName.parse("mysql:8.0"))
    .withDatabaseName("testdb")
    .withUsername("testuser")
    .withPassword("testpass");

// Start the container
mysql.start();

// Get JDBC connection details
String jdbcUrl = mysql.getJdbcUrl();
String username = mysql.getUsername();
String password = mysql.getPassword();

// Create database connection
Connection connection = mysql.createConnection("");

// Use with JUnit 5
@Testcontainers
class DatabaseTest {
    @Container
    static MySQLContainer<?> mysql = new MySQLContainer<>("mysql:8.0")
        .withDatabaseName("test")
        .withUsername("test")
        .withPassword("test");
    
    @Test
    void testDatabaseOperation() {
        String jdbcUrl = mysql.getJdbcUrl();
        // Test database operations...
    }
}

Architecture

The Testcontainers MySQL module is built around several key components:

  • MySQLContainer: Main container class extending JdbcDatabaseContainer with MySQL-specific features
  • Configuration Management: Custom MySQL configuration file override support via .cnf files
  • Driver Detection: Automatic JDBC driver detection with fallback between modern and legacy MySQL drivers
  • Connection Management: JDBC URL construction with proper SSL and authentication settings
  • Provider Pattern: Factory classes for creating containers from connection URLs or configuration
  • R2DBC Integration: Reactive database access through R2DBC wrapper classes
  • Test Integration: Seamless integration with JUnit and other testing frameworks

Capabilities

MySQL Container Management

Core MySQL container functionality including lifecycle management, configuration, and connection handling.

public class MySQLContainer<SELF extends MySQLContainer<SELF>> extends JdbcDatabaseContainer<SELF> {
    public MySQLContainer(DockerImageName dockerImageName);
    public String getJdbcUrl();
    public String getDriverClassName();
    public Connection createConnection(String queryString) throws SQLException, NoDriverFoundException;
    public SELF withDatabaseName(String databaseName);
    public SELF withUsername(String username);  
    public SELF withPassword(String password);
    public SELF withConfigurationOverride(String configPath);
}

MySQL Container

Database Configuration

MySQL-specific configuration options including custom configuration files, environment variables, and connection parameters.

public SELF withConfigurationOverride(String configPath);
public SELF withUrlParam(String paramName, String paramValue);
public SELF withStartupTimeoutSeconds(int startupTimeoutSeconds);
public SELF withConnectTimeoutSeconds(int connectTimeoutSeconds);

Database Configuration

Initialization and Scripts

Database initialization with SQL scripts and setup procedures.

public SELF withInitScript(String initScriptPath);
public SELF withInitScripts(String... initScriptPaths);
public SELF withInitScripts(Iterable<String> initScriptPaths);

Database Initialization

Provider Pattern Support

Factory pattern implementation for creating MySQL containers from connection URLs and configuration objects.

public class MySQLContainerProvider extends JdbcDatabaseContainerProvider {
    public boolean supports(String databaseType);
    public JdbcDatabaseContainer newInstance();
    public JdbcDatabaseContainer newInstance(String tag);
    public JdbcDatabaseContainer newInstance(ConnectionUrl connectionUrl);
}

Provider Pattern

R2DBC Reactive Database Access

Reactive database access using R2DBC for non-blocking database operations.

public class MySQLR2DBCDatabaseContainer implements R2DBCDatabaseContainer {
    public static ConnectionFactoryOptions getOptions(MySQLContainer<?> container);
    public ConnectionFactoryOptions configure(ConnectionFactoryOptions options);
}

public class MySQLR2DBCDatabaseContainerProvider implements R2DBCDatabaseContainerProvider {
    public boolean supports(ConnectionFactoryOptions options);
    public R2DBCDatabaseContainer createContainer(ConnectionFactoryOptions options);
}

R2DBC Integration

Types

// Core container configuration
public static final String NAME = "mysql";
public static final Integer MYSQL_PORT = 3306;

// Default credentials (package-private but accessible)  
static final String DEFAULT_USER = "test";
static final String DEFAULT_PASSWORD = "test";

// Deprecated constants (still available for compatibility)
@Deprecated
public static final String DEFAULT_TAG = "5.7.34";
@Deprecated  
public static final String IMAGE = "mysql";

// Exception types
public class NoDriverFoundException extends Exception { }
public class ContainerLaunchException extends RuntimeException { }