All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.vality.testcontainers.annotations.postgresql.PostgresqlTestcontainerFactory Maven / Gradle / Ivy

package dev.vality.testcontainers.annotations.postgresql;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.Synchronized;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;

import java.util.UUID;

import static dev.vality.testcontainers.annotations.util.SpringApplicationPropertiesLoader.loadDefaultLibraryProperty;

/**
 * Фабрика по созданию контейнеров
 * 

{@link #create()} создает экземпляр тестконтейнера *

{@link #getOrCreateSingletonContainer()} создает синглтон тестконтейнера * * @see PostgresqlTestcontainerExtension PostgresqlTestcontainerExtension */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class PostgresqlTestcontainerFactory { private static final String POSTGRESQL_IMAGE_NAME = "postgres"; private static final String TAG_PROPERTY = "testcontainers.postgresql.tag"; private PostgreSQLContainer postgresqlContainer; public static PostgreSQLContainer container() { return instance().create(); } public static PostgreSQLContainer singletonContainer() { return instance().getOrCreateSingletonContainer(); } private static PostgresqlTestcontainerFactory instance() { return SingletonHolder.INSTANCE; } @Synchronized private PostgreSQLContainer getOrCreateSingletonContainer() { if (postgresqlContainer != null) { return postgresqlContainer; } postgresqlContainer = create(); return postgresqlContainer; } private PostgreSQLContainer create() { try (PostgreSQLContainer container = new PostgreSQLContainer<>( DockerImageName .parse(POSTGRESQL_IMAGE_NAME) .withTag(loadDefaultLibraryProperty(TAG_PROPERTY)))) { container.withNetworkAliases("postgres-" + UUID.randomUUID()); return container; } } private static class SingletonHolder { private static final PostgresqlTestcontainerFactory INSTANCE = new PostgresqlTestcontainerFactory(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy