or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

advanced-patterns.mdcore-operations.mddatabase-init.mddatasource.mdembedded-database.mdexception-translation.mdindex.mdkey-generation.mdlob-support.mdresult-parameter-handling.mdsimplified-operations.mdsqlrowset.mdtransactions.md
tile.json

embedded-database.mddocs/

Embedded Database Support

Spring JDBC provides support for creating and managing embedded in-memory databases for development and testing purposes. Supported databases include H2, HSQLDB, and Derby.

EmbeddedDatabaseBuilder

Builder class for creating embedded databases with fluent API.

public class EmbeddedDatabaseBuilder {
    // Constructors
    public EmbeddedDatabaseBuilder() { }
    public EmbeddedDatabaseBuilder(ResourceLoader resourceLoader) { }

    // Configuration
    public EmbeddedDatabaseBuilder setType(EmbeddedDatabaseType type) { }
    public EmbeddedDatabaseBuilder setName(String databaseName) { }
    public EmbeddedDatabaseBuilder generateUniqueName(boolean flag) { }
    public EmbeddedDatabaseBuilder setDataSourceFactory(DataSourceFactory factory) { }
    public EmbeddedDatabaseBuilder addScript(String script) { }
    public EmbeddedDatabaseBuilder addScripts(String... scripts) { }
    public EmbeddedDatabaseBuilder setScriptEncoding(String scriptEncoding) { }
    public EmbeddedDatabaseBuilder setSeparator(String separator) { }
    public EmbeddedDatabaseBuilder setCommentPrefix(String commentPrefix) { }
    public EmbeddedDatabaseBuilder setCommentPrefixes(String... commentPrefixes) { }
    public EmbeddedDatabaseBuilder setBlockCommentStartDelimiter(String blockCommentStartDelimiter) { }
    public EmbeddedDatabaseBuilder setBlockCommentEndDelimiter(String blockCommentEndDelimiter) { }
    public EmbeddedDatabaseBuilder setContinueOnError(boolean flag) { }
    public EmbeddedDatabaseBuilder ignoreFailedDrops(boolean flag) { }

    // Build
    public EmbeddedDatabase build() { }
}

EmbeddedDatabase Interface

public interface EmbeddedDatabase extends DataSource {
    void shutdown();
}

EmbeddedDatabaseType

public enum EmbeddedDatabaseType {
    H2,
    HSQL,
    DERBY
}

Usage Examples

Basic H2 Database

import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;

// Create H2 embedded database
EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
    .setType(EmbeddedDatabaseType.H2)
    .setName("testdb")
    .addScript("schema.sql")
    .addScript("data.sql")
    .build();

// Use database
JdbcTemplate jdbcTemplate = new JdbcTemplate(db);

// Shutdown when done
db.shutdown();

Multiple Scripts

EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
    .setType(EmbeddedDatabaseType.H2)
    .addScripts(
        "schema/tables.sql",
        "schema/constraints.sql",
        "schema/indexes.sql",
        "data/users.sql",
        "data/products.sql"
    )
    .build();

With Custom Configuration

EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
    .setType(EmbeddedDatabaseType.H2)
    .setName("mydb")
    .generateUniqueName(true)  // Generate unique name
    .setScriptEncoding("UTF-8")
    .setSeparator(";")
    .setCommentPrefix("--")
    .setContinueOnError(false)
    .ignoreFailedDrops(true)
    .addScript("schema.sql")
    .build();

HSQLDB Example

EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
    .setType(EmbeddedDatabaseType.HSQL)
    .addScript("classpath:schema-hsql.sql")
    .addScript("classpath:test-data.sql")
    .build();

Derby Example

EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
    .setType(EmbeddedDatabaseType.DERBY)
    .setName("derby-testdb")
    .addScript("schema-derby.sql")
    .build();

Spring Test Integration

@SpringJUnitConfig
public class DatabaseTest {

    private EmbeddedDatabase db;
    private JdbcTemplate jdbcTemplate;

    @BeforeEach
    public void setUp() {
        db = new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("schema.sql")
            .addScript("test-data.sql")
            .build();

        jdbcTemplate = new JdbcTemplate(db);
    }

    @AfterEach
    public void tearDown() {
        db.shutdown();
    }

    @Test
    public void testQuery() {
        Integer count = jdbcTemplate.queryForObject(
            "SELECT COUNT(*) FROM users",
            Integer.class
        );
        assertEquals(5, count);
    }
}

Spring Configuration

@Configuration
@Profile("test")
public class TestDatabaseConfig {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .setName("testdb")
            .addScript("classpath:schema.sql")
            .addScript("classpath:test-data.sql")
            .build();
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

Dynamic Script Selection

ResourceLoader resourceLoader = new DefaultResourceLoader();
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(resourceLoader)
    .setType(EmbeddedDatabaseType.H2);

// Add scripts dynamically
if (includeTestData) {
    builder.addScript("schema.sql")
           .addScript("test-data.sql");
} else {
    builder.addScript("schema.sql");
}

EmbeddedDatabase db = builder.build();

Best Practices

  1. Use for testing only - Not suitable for production
  2. Generate unique names - For parallel test execution
  3. Always shutdown - Free resources after use
  4. Keep scripts simple - Embedded databases have limitations
  5. Use H2 - Best compatibility and features
  6. Separate schema and data - Better maintainability
  7. Handle encoding - Specify UTF-8 for international characters