diff --git a/km-rest/pom.xml b/km-rest/pom.xml
index 5c8ea2b8..091e2696 100644
--- a/km-rest/pom.xml
+++ b/km-rest/pom.xml
@@ -145,14 +145,6 @@
test
-
- com.mysql
- mysql-connector-j
- 8.0.32
- test
-
-
-
org.testcontainers
elasticsearch
diff --git a/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/KnowStreamApplicationTest.java b/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/KnowStreamApplicationTest.java
index 97556191..a023e21a 100644
--- a/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/KnowStreamApplicationTest.java
+++ b/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/KnowStreamApplicationTest.java
@@ -1,7 +1,7 @@
package com.xiaojukeji.know.streaming.km;
import com.xiaojukeji.know.streaming.km.rest.KnowStreaming;
-import com.xiaojukeji.know.streaming.test.km.KMBase;
+import com.xiaojukeji.know.streaming.test.KMTestEnvService;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
@@ -19,7 +19,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = KnowStreaming.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-public class KnowStreamApplicationTest extends KMBase {
+public class KnowStreamApplicationTest extends KMTestEnvService {
@LocalServerPort
private Integer port;
diff --git a/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/core/service/cluster/ClusterPhyServiceTest.java b/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/core/service/cluster/ClusterPhyServiceTest.java
index 14f07072..c2a0b209 100644
--- a/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/core/service/cluster/ClusterPhyServiceTest.java
+++ b/km-rest/src/test/java/com/xiaojukeji/know/streaming/km/core/service/cluster/ClusterPhyServiceTest.java
@@ -5,6 +5,7 @@ import com.xiaojukeji.know.streaming.km.common.bean.dto.cluster.ClusterPhyAddDTO
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
import com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig;
import com.xiaojukeji.know.streaming.km.common.converter.ClusterConverter;
+import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum;
import com.xiaojukeji.know.streaming.km.common.exception.AdminOperateException;
import com.xiaojukeji.know.streaming.km.common.exception.DuplicateException;
import com.xiaojukeji.know.streaming.km.common.exception.ParamErrorException;
@@ -33,7 +34,7 @@ public class ClusterPhyServiceTest extends KnowStreamApplicationTest {
ClusterPhyAddDTO dto = new ClusterPhyAddDTO();
dto.setName("test");
dto.setDescription("");
- dto.setKafkaVersion(kafkaVersion());
+ dto.setKafkaVersion(VersionEnum.V_2_5_1.getVersion());
dto.setJmxProperties(jmxConfig);
dto.setClientProperties(properties);
dto.setZookeeper(zookeeperUrl());
diff --git a/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/KMTestEnvService.java b/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/KMTestEnvService.java
new file mode 100644
index 00000000..f74d456f
--- /dev/null
+++ b/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/KMTestEnvService.java
@@ -0,0 +1,74 @@
+package com.xiaojukeji.know.streaming.test;
+
+import com.xiaojukeji.know.streaming.test.container.es.ESTestContainer;
+import com.xiaojukeji.know.streaming.test.container.kafka.KafkaTestContainer;
+import com.xiaojukeji.know.streaming.test.container.mysql.MySQLTestContainer;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.springframework.test.context.DynamicPropertyRegistry;
+import org.springframework.test.context.DynamicPropertySource;
+
+public abstract class KMTestEnvService {
+ private static final boolean useES = true;
+ private static final boolean useMysql = true;
+ private static final boolean useKafka = true;
+
+
+ private static MySQLTestContainer mySQLTestContainer;
+
+ private static ESTestContainer esTestContainer;
+
+ private static KafkaTestContainer kafkaTestContainer;
+
+ @BeforeAll
+ static void init() {
+ if (useES) {
+ mySQLTestContainer = new MySQLTestContainer();
+ mySQLTestContainer.init();
+ }
+
+ if (useMysql) {
+ esTestContainer = new ESTestContainer();
+ esTestContainer.init();
+ }
+
+ if (useKafka) {
+ kafkaTestContainer = new KafkaTestContainer();
+ kafkaTestContainer.init();
+ }
+ }
+
+
+ @DynamicPropertySource
+ static void setUp(DynamicPropertyRegistry registry) {
+ registry.add("spring.datasource.know-streaming.jdbc-url", mySQLTestContainer.jdbcUrl());
+ registry.add("spring.logi-job.jdbc-url", mySQLTestContainer.jdbcUrl());
+ registry.add("spring.logi-security.jdbc-url", mySQLTestContainer.jdbcUrl());
+
+ registry.add("es.client.address", esTestContainer.esUrl());
+ }
+
+
+ @AfterAll
+ static void destroy() {
+ if (mySQLTestContainer != null) {
+ mySQLTestContainer.cleanup();
+ }
+
+ if (esTestContainer != null) {
+ esTestContainer.cleanup();
+ }
+
+ if (kafkaTestContainer != null) {
+ kafkaTestContainer.cleanup();
+ }
+ }
+
+ protected String bootstrapServers() {
+ return kafkaTestContainer.getBootstrapServers();
+ }
+
+ protected String zookeeperUrl() {
+ return kafkaTestContainer.getZKUrl();
+ }
+}
diff --git a/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/container/BaseTestContainer.java b/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/container/BaseTestContainer.java
new file mode 100644
index 00000000..4dba9fd0
--- /dev/null
+++ b/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/container/BaseTestContainer.java
@@ -0,0 +1,7 @@
+package com.xiaojukeji.know.streaming.test.container;
+
+public abstract class BaseTestContainer {
+ public abstract void init();
+
+ public abstract void cleanup();
+}
diff --git a/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/container/es/ESTestContainer.java b/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/container/es/ESTestContainer.java
new file mode 100644
index 00000000..2a297252
--- /dev/null
+++ b/km-rest/src/test/java/com/xiaojukeji/know/streaming/test/container/es/ESTestContainer.java
@@ -0,0 +1,43 @@
+package com.xiaojukeji.know.streaming.test.container.es;
+
+import com.xiaojukeji.know.streaming.test.container.BaseTestContainer;
+import org.jetbrains.annotations.NotNull;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.elasticsearch.ElasticsearchContainer;
+import org.testcontainers.lifecycle.Startables;
+import org.testcontainers.utility.DockerImageName;
+
+import java.util.function.Supplier;
+
+public class ESTestContainer extends BaseTestContainer {
+
+ // es容器
+ private static final ElasticsearchContainer ES_CONTAINER = new ElasticsearchContainer(
+ DockerImageName.parse("docker.io/library/elasticsearch:7.6.2").asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")
+ )
+ .withEnv("TZ", "Asia/Shanghai")
+ .withEnv("ES_JAVA_OPTS", "-Xms512m -Xmx512m")
+ .withEnv("discovery.type", "single-node");
+
+ // km容器,需要初始化es索引模版
+ private static final GenericContainer> INIT_CONTAINER = new GenericContainer<>(
+ "knowstreaming/knowstreaming-manager:latest"
+ )
+ .withEnv("TZ", "Asia/Shanghai")
+ .withCommand("/bin/bash", "/es_template_create.sh")
+ .dependsOn(ES_CONTAINER);
+
+ @NotNull
+ public Supplier