также в проекте есть свойство ryuk.container.image=testcontainers/ryuk:0.3.3 который создает контейнер, который должен удалить все тестовые контейнеры после завершения тестов, но по каким-то причинам удаление не происходит
[list] [*]здесь мы создаём контейнеры [*]также в проекте есть свойство ryuk.container.image=testcontainers/ryuk:0.3.3 который создает контейнер, который должен удалить все тестовые контейнеры после завершения тестов, но по каким-то причинам удаление не происходит [/list] [code] public class TestContainersSpringContextCustomizerFactory implements ContextCustomizerFactory {
EmbeddedElasticsearch elasticsearchAnnotation = AnnotatedElementUtils.findMergedAnnotation( testClass, EmbeddedElasticsearch.class ); if (null != elasticsearchAnnotation) { log.debug("detected the EmbeddedElasticsearch annotation on class {}", testClass.getName()); log.info("Warming up the elastic database"); if (null == elasticsearchBean) { elasticsearchBean = beanFactory.createBean(ElasticsearchTestContainer.class); beanFactory.registerSingleton(ElasticsearchTestContainer.class.getName(), elasticsearchBean); // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(ElasticsearchTestContainer.class.getName(), elasticsearchBean); } testValues = testValues.and( "spring.elasticsearch.uris=http://" + elasticsearchBean.getElasticsearchContainer().getHttpHostAddress() ); } //similary code other for other containers } [/code]
В качестве примера покажу код одного из 4-х контейнеров, остальные пишутся аналогично
В качестве примера покажу код одного из 4-х контейнеров, остальные пишутся аналогично
р> [code] /** * Base class for starting/stopping ElasticSearch during tests. */ public class ElasticsearchTestContainer implements InitializingBean, DisposableBean {
private static final Logger log = LoggerFactory.getLogger(ElasticsearchTestContainer.class); private static final Integer CONTAINER_STARTUP_TIMEOUT_MINUTES = 10; private ElasticsearchContainer elasticsearchContainer;
@Override public void destroy() { if (null != elasticsearchContainer && elasticsearchContainer.isRunning()) { elasticsearchContainer.close(); } }
@Override public void afterPropertiesSet() { if (null == elasticsearchContainer) { elasticsearchContainer = new ElasticsearchContainer( DockerImageName.parse("docker-persistent.nexus.jaga.rt.ru/elasticsearch") .asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch") .withTag("7.17.4")) .withStartupTimeout( Duration.of(CONTAINER_STARTUP_TIMEOUT_MINUTES, ChronoUnit.MINUTES)) .withSharedMemorySize(256000000L) .withEnv("ES_JAVA_OPTS", "-Xms256m -Xmx256m") .withEnv("xpack.security.enabled", "false") .withLogConsumer(new Slf4jLogConsumer(log)) .withReuse(true); } if (!elasticsearchContainer.isRunning()) { elasticsearchContainer.start(); } }
public ElasticsearchContainer getElasticsearchContainer() { return elasticsearchContainer; } } [/code]