Testcontainers MySQL module for creating throwaway MySQL database containers for Java integration testing
npx @tessl/cli install tessl/maven-org-testcontainers--mysql@1.21.0Testcontainers 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.
<dependency><groupId>org.testcontainers</groupId><artifactId>mysql</artifactId><version>1.21.3</version></dependency>implementation 'org.testcontainers:mysql:1.21.3'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;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...
}
}The Testcontainers MySQL module is built around several key components:
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-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 initialization with SQL scripts and setup procedures.
public SELF withInitScript(String initScriptPath);
public SELF withInitScripts(String... initScriptPaths);
public SELF withInitScripts(Iterable<String> initScriptPaths);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);
}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);
}// 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 { }