This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new a8e43fd262d Merge DataSourceEnvironment and StorageContainerOption 
(#36655)
a8e43fd262d is described below

commit a8e43fd262dc69dcf9bdff6f81dfa8abfe035149
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Sep 21 16:26:34 2025 +0800

    Merge DataSourceEnvironment and StorageContainerOption (#36655)
    
    * Merge DataSourceEnvironment and StorageContainerOption
    
    * Merge DataSourceEnvironment and StorageContainerOption
---
 .../agent/engine/env/AgentE2ETestEnvironment.java  |   6 +-
 .../impl/ShardingSphereProxyDockerContainer.java   |  11 ++-
 .../impl/ShardingSphereProxyEmbeddedContainer.java |   7 +-
 .../mount/MountConfigurationResourceGenerator.java |  11 ++-
 .../storage/mount/MountSQLResourceGenerator.java   |  17 ++--
 .../option/StorageContainerConnectOption.java}     |  10 +-
 ...tion.java => StorageContainerCreateOption.java} |   8 +-
 .../storage/option/StorageContainerOption.java     | 104 ++-------------------
 .../hive/HiveStorageContainerConnectOption.java}   |  13 +--
 .../HiveStorageContainerCreateOption.java}         |  13 +--
 .../dialect/hive/HiveStorageContainerOption.java}  |  27 ++----
 .../MariaDBStorageContainerConnectOption.java}     |  13 +--
 .../MariaDBStorageContainerCreateOption.java}      |  13 +--
 .../mariadb/MariaDBStorageContainerOption.java}    |  29 +++---
 .../mysql/MySQLStorageContainerConnectOption.java} |  13 +--
 .../MySQLStorageContainerCreateOption.java}        |  13 +--
 .../mysql/MySQLStorageContainerOption.java}        |  29 +++---
 .../OpenGaussStorageContainerConnectOption.java}   |  13 +--
 .../OpenGaussStorageContainerCreateOption.java}    |  13 +--
 .../OpenGaussStorageContainerOption.java}          |  27 ++----
 .../PostgreSQLStorageContainerConnectOption.java}  |  13 +--
 .../PostgreSQLStorageContainerCreateOption.java}   |  13 +--
 .../PostgreSQLStorageContainerOption.java}         |  27 ++----
 .../storage/type/DockerStorageContainer.java       |  51 +++++-----
 .../storage/type/NativeStorageContainer.java       |  13 ++-
 .../env/container/util/StorageContainerUtils.java  |   4 +-
 ...container.storage.option.StorageContainerOption |  10 +-
 ...2e.env.runtime.datasource.DataSourceEnvironment |  22 -----
 .../pipeline/cases/PipelineContainerComposer.java  |   9 +-
 .../pipeline/env/PipelineE2EEnvironment.java       |   2 +-
 .../docker/PipelineDockerContainerComposer.java    |   3 +-
 ...lectPipelineNativeContainerDropTableOption.java |   6 +-
 .../natived/PipelineNativeContainerComposer.java   |   6 +-
 ...iaDBPipelineNativeContainerDropTableOption.java |   6 +-
 ...ySQLPipelineNativeContainerDropTableOption.java |   6 +-
 ...aussPipelineNativeContainerDropTableOption.java |   6 +-
 ...aclePipelineNativeContainerDropTableOption.java |   6 +-
 ...eSQLPipelineNativeContainerDropTableOption.java |   6 +-
 .../engine/base/TransactionBaseE2EIT.java          |   9 +-
 .../transaction/env/TransactionE2EEnvironment.java |  12 +--
 40 files changed, 212 insertions(+), 408 deletions(-)

diff --git 
a/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java
 
b/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java
index 34bc8c6780a..c04b6f1c59e 100644
--- 
a/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java
+++ 
b/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java
@@ -117,7 +117,8 @@ public final class AgentE2ETestEnvironment {
         containers = new ITContainers(null);
         ShardingSphereProxyDockerContainer proxyContainer = new 
ShardingSphereProxyDockerContainer(databaseType, 
getAdaptorContainerConfiguration());
         proxyContainer.withLogConsumer(testConfig.isLogEnabled() ? 
this::collectLogs : null);
-        StorageContainer storageContainer = new 
DockerStorageContainer(imageConfig.getMysqlImage(), 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, databaseType), 
null);
+        StorageContainer storageContainer = new DockerStorageContainer(
+                imageConfig.getMysqlImage(), 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, databaseType), 
null);
         proxyContainer.dependsOn(storageContainer);
         containers.registerContainer(storageContainer);
         GovernanceContainer governanceContainer = new 
GovernanceContainer(TypedSPILoader.getService(GovernanceContainerOption.class, 
"ZooKeeper"));
@@ -148,7 +149,8 @@ public final class AgentE2ETestEnvironment {
     
     private void createJDBCEnvironment(final DockerITContainer 
agentPluginContainer) {
         containers = new ITContainers(null);
-        StorageContainer storageContainer = new 
DockerStorageContainer(imageConfig.getMysqlImage(), 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, databaseType), 
null);
+        StorageContainer storageContainer = new DockerStorageContainer(
+                imageConfig.getMysqlImage(), 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, databaseType), 
null);
         ShardingSphereJdbcAgentContainer jdbcAgentContainer = new 
ShardingSphereJdbcAgentContainer(
                 imageConfig.getJdbcProjectImage(), testConfig.getPluginType(), 
testConfig.isLogEnabled() ? this::collectLogs : null);
         jdbcAgentContainer.dependsOn(storageContainer);
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyDockerContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyDockerContainer.java
index 3ef46599ad5..de57170b22b 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyDockerContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyDockerContainer.java
@@ -24,9 +24,10 @@ import 
org.apache.shardingsphere.test.e2e.env.container.DockerITContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.adapter.AdapterContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.adapter.config.AdaptorContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.ProxyContainerConstants;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.JdbcConnectCheckingWaitStrategy;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.StorageContainerUtils;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 
 import javax.sql.DataSource;
 import java.sql.DriverManager;
@@ -41,14 +42,14 @@ public final class ShardingSphereProxyDockerContainer 
extends DockerITContainer
     
     private final AdaptorContainerConfiguration config;
     
-    private final DataSourceEnvironment dataSourceEnvironment;
+    private final StorageContainerConnectOption storageContainerConnectOption;
     
     private final AtomicReference<DataSource> targetDataSourceProvider = new 
AtomicReference<>();
     
     public ShardingSphereProxyDockerContainer(final DatabaseType databaseType, 
final AdaptorContainerConfiguration config) {
         super(ProxyContainerConstants.PROXY_CONTAINER_NAME_PREFIX, 
config.getAdapterContainerImage());
         this.config = config;
-        dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, databaseType);
+        storageContainerConnectOption = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getConnectOption();
     }
     
     @Override
@@ -63,7 +64,7 @@ public final class ShardingSphereProxyDockerContainer extends 
DockerITContainer
         addEnv("TZ", "UTC");
         mapResources(config.getMountedResources());
         setWaitStrategy(new JdbcConnectCheckingWaitStrategy(() -> 
DriverManager.getConnection(
-                dataSourceEnvironment.getURL(getHost(), getMappedPort(3307), 
config.getProxyDataSourceName()), ProxyContainerConstants.USER, 
ProxyContainerConstants.PASSWORD)));
+                storageContainerConnectOption.getURL(getHost(), 
getMappedPort(3307), config.getProxyDataSourceName()), 
ProxyContainerConstants.USER, ProxyContainerConstants.PASSWORD)));
         withStartupTimeout(Duration.of(120L, ChronoUnit.SECONDS));
     }
     
@@ -72,7 +73,7 @@ public final class ShardingSphereProxyDockerContainer extends 
DockerITContainer
         DataSource dataSource = targetDataSourceProvider.get();
         if (null == dataSource) {
             
targetDataSourceProvider.set(StorageContainerUtils.generateDataSource(
-                    dataSourceEnvironment.getURL(getHost(), 
getMappedPort(3307), config.getProxyDataSourceName()), 
ProxyContainerConstants.USER, ProxyContainerConstants.PASSWORD, 2));
+                    storageContainerConnectOption.getURL(getHost(), 
getMappedPort(3307), config.getProxyDataSourceName()), 
ProxyContainerConstants.USER, ProxyContainerConstants.PASSWORD, 2));
         }
         return targetDataSourceProvider.get();
     }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
index 8082846db3f..45107d5e4fd 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
@@ -37,11 +37,12 @@ import 
org.apache.shardingsphere.test.e2e.env.container.adapter.AdapterContainer
 import 
org.apache.shardingsphere.test.e2e.env.container.adapter.config.AdaptorContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.ProxyContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.type.NativeStorageContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.JdbcConnectCheckingWaitStrategy;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.StorageContainerUtils;
 import org.apache.shardingsphere.test.e2e.env.runtime.E2ETestEnvironment;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.lifecycle.Startable;
 import org.testcontainers.utility.Base58;
@@ -210,8 +211,8 @@ public final class ShardingSphereProxyEmbeddedContainer 
implements EmbeddedITCon
     public DataSource getTargetDataSource(final String serverLists) {
         DataSource dataSource = targetDataSourceProvider.get();
         if (null == dataSource) {
-            DataSourceEnvironment dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, databaseType);
-            
targetDataSourceProvider.set(StorageContainerUtils.generateDataSource(dataSourceEnvironment.getURL(
+            StorageContainerConnectOption storageContainerConnectOption = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getConnectOption();
+            
targetDataSourceProvider.set(StorageContainerUtils.generateDataSource(storageContainerConnectOption.getURL(
                     "127.0.0.1", 3307, config.getProxyDataSourceName()), 
ProxyContainerConstants.USER, ProxyContainerConstants.PASSWORD, 2));
         }
         return targetDataSourceProvider.get();
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountConfigurationResourceGenerator.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountConfigurationResourceGenerator.java
index a58fcc2b3d4..ddb64f9c6d9 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountConfigurationResourceGenerator.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountConfigurationResourceGenerator.java
@@ -18,7 +18,8 @@
 package org.apache.shardingsphere.test.e2e.env.container.storage.mount;
 
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 
 import java.io.File;
 import java.util.Collection;
@@ -31,7 +32,9 @@ import java.util.Map;
 @RequiredArgsConstructor
 public final class MountConfigurationResourceGenerator {
     
-    private final StorageContainerOption option;
+    private final DatabaseType databaseType;
+    
+    private final StorageContainerCreateOption option;
     
     /**
      * Generate mount configuration resource map.
@@ -46,8 +49,8 @@ public final class MountConfigurationResourceGenerator {
         for (String each : mountedConfigResources) {
             String fileName = new File(each).getName();
             String configFile = option.getSupportedMajorVersions().isEmpty()
-                    ? String.format("container/%s/cnf/%s", 
option.getDatabaseType().toLowerCase(), fileName)
-                    : String.format("container/%s/cnf/%d/%s", 
option.getDatabaseType().toLowerCase(), majorVersion, fileName);
+                    ? String.format("container/%s/cnf/%s", 
databaseType.getType().toLowerCase(), fileName)
+                    : String.format("container/%s/cnf/%d/%s", 
databaseType.getType().toLowerCase(), majorVersion, fileName);
             result.put(getToBeMountedConfigurationFile(configFile, scenario), 
each);
         }
         return result;
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountSQLResourceGenerator.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountSQLResourceGenerator.java
index 0e5f742cc71..6dbda731984 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountSQLResourceGenerator.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/mount/MountSQLResourceGenerator.java
@@ -18,7 +18,8 @@
 package org.apache.shardingsphere.test.e2e.env.container.storage.mount;
 
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.scenario.path.ScenarioDataPath;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.scenario.path.ScenarioDataPath.Type;
 
@@ -45,7 +46,9 @@ public final class MountSQLResourceGenerator {
     
     private static final String TO_BE_MOUNTED_EXPECTED_SCENARIO_SQL_FILE = 
"60-scenario-expected-init.sql";
     
-    private final StorageContainerOption option;
+    private final DatabaseType databaseType;
+    
+    private final StorageContainerCreateOption option;
     
     /**
      * Generate mount SQL resource map.
@@ -59,7 +62,7 @@ public final class MountSQLResourceGenerator {
         for (String each : TO_BE_MOUNTED_COMMON_SQL_FILES) {
             findToBeMountedCommonSQLFile(each).ifPresent(optional -> 
toBeMountedSQLFiles.add("/" + optional));
         }
-        String toBeMountedStandardEnvSQLFilePath = 
String.format("env/container/%s/init-sql/%s", 
option.getDatabaseType().toLowerCase(), TO_BE_MOUNTED_STANDARD_ENV_SQL_FILE);
+        String toBeMountedStandardEnvSQLFilePath = 
String.format("env/container/%s/init-sql/%s", 
databaseType.getType().toLowerCase(), TO_BE_MOUNTED_STANDARD_ENV_SQL_FILE);
         if (null != 
Thread.currentThread().getContextClassLoader().getResource(toBeMountedStandardEnvSQLFilePath))
 {
             toBeMountedSQLFiles.add("/" + toBeMountedStandardEnvSQLFilePath);
         }
@@ -73,22 +76,22 @@ public final class MountSQLResourceGenerator {
     }
     
     private Optional<String> findToBeMountedCommonSQLFile(final String 
toBeMountedSQLFile) {
-        String toBeMountedFilePath = String.format("container/%s/init-sql/%s", 
option.getDatabaseType().toLowerCase(), toBeMountedSQLFile);
+        String toBeMountedFilePath = String.format("container/%s/init-sql/%s", 
databaseType.getType().toLowerCase(), toBeMountedSQLFile);
         return null == 
Thread.currentThread().getContextClassLoader().getResource(toBeMountedFilePath) 
? Optional.empty() : Optional.of(toBeMountedFilePath);
     }
     
     private Optional<String> getToBeMountedAdditionalEnvSQLFile(final String 
sqlFile) {
-        String toBeMountedFilePath = 
String.format("env/container/%s/init-sql/%s", 
option.getDatabaseType().toLowerCase(), sqlFile);
+        String toBeMountedFilePath = 
String.format("env/container/%s/init-sql/%s", 
databaseType.getType().toLowerCase(), sqlFile);
         return null == 
Thread.currentThread().getContextClassLoader().getResource(toBeMountedFilePath) 
? Optional.empty() : Optional.of(toBeMountedFilePath);
     }
     
     private Collection<String> getToBeMountedScenarioSQLFiles(final String 
scenario) {
         Collection<String> result = new LinkedList<>();
-        String actualScenarioFile = new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, 
option.getType()) + "/" + TO_BE_MOUNTED_ACTUAL_SCENARIO_SQL_FILE;
+        String actualScenarioFile = new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, databaseType) + 
"/" + TO_BE_MOUNTED_ACTUAL_SCENARIO_SQL_FILE;
         if (null != 
Thread.currentThread().getContextClassLoader().getResource(actualScenarioFile)) 
{
             result.add(actualScenarioFile);
         }
-        String expectedScenarioFile = new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, 
option.getType()) + "/" + TO_BE_MOUNTED_EXPECTED_SCENARIO_SQL_FILE;
+        String expectedScenarioFile = new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, databaseType) 
+ "/" + TO_BE_MOUNTED_EXPECTED_SCENARIO_SQL_FILE;
         if (null != 
Thread.currentThread().getContextClassLoader().getResource(expectedScenarioFile))
 {
             result.add(expectedScenarioFile);
         }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/DataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerConnectOption.java
similarity index 81%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/DataSourceEnvironment.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerConnectOption.java
index 61f8d37d6c6..0b5189775b2 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/DataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerConnectOption.java
@@ -15,16 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource;
-
-import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI;
-import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
+package org.apache.shardingsphere.test.e2e.env.container.storage.option;
 
 /**
- * Data source environment.
+ * Storage container connect option.
  */
-@SingletonSPI
-public interface DataSourceEnvironment extends DatabaseTypedSPI {
+public interface StorageContainerConnectOption {
     
     /**
      * Get driver class name.
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerCreateOption.java
similarity index 92%
copy from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
copy to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerCreateOption.java
index 4992ce9e9ca..6082b99595a 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerCreateOption.java
@@ -17,19 +17,15 @@
 
 package org.apache.shardingsphere.test.e2e.env.container.storage.option;
 
-import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI;
-import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
 /**
- * Storage container option.
+ * Storage container create option.
  */
-@SingletonSPI
-public interface StorageContainerOption extends DatabaseTypedSPI {
+public interface StorageContainerCreateOption {
     
     /**
      * Get container port.
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
index 4992ce9e9ca..ada1d0a8bf0 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/StorageContainerOption.java
@@ -20,113 +20,23 @@ package 
org.apache.shardingsphere.test.e2e.env.container.storage.option;
 import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
 /**
- * Storage container option.
+ * Storage container create option.
  */
 @SingletonSPI
 public interface StorageContainerOption extends DatabaseTypedSPI {
     
     /**
-     * Get container port.
-     *
-     * @return container port
-     */
-    int getPort();
-    
-    /**
-     * Get default container image name.
-     *
-     * @return default container image name
-     */
-    String getDefaultImageName();
-    
-    /**
-     * Get container command.
-     *
-     * @return container command
-     */
-    String getCommand();
-    
-    /**
-     * Get container environments.
-     *
-     * @return container environments
-     */
-    Map<String, String> getEnvironments();
-    
-    /**
-     * Get mounted configuration resources.
-     *
-     * @return mounted configuration resources
-     */
-    Collection<String> getMountedConfigurationResources();
-    
-    /**
-     * Get additional env mounted SQL resources.
-     *
-     * @param majorVersion major version
-     * @return additional env mounted SQL resources
-     */
-    Collection<String> getAdditionalEnvMountedSQLResources(int majorVersion);
-    
-    /**
-     * Get supported major versions.
-     *
-     * @return supported major versions
-     */
-    List<Integer> getSupportedMajorVersions();
-    
-    /**
-     * Whether with privileged mode.
-     *
-     * @return is with privileged mode or not
-     */
-    boolean withPrivilegedMode();
-    
-    /**
-     * Get the default database name.
-     *
-     * @param majorVersion major version
-     * @return default database name
-     */
-    Optional<String> getDefaultDatabaseName(int majorVersion);
-    
-    /**
-     * Get container startup timeout seconds.
-     *
-     * @return container startup timeout seconds
-     */
-    long getStartupTimeoutSeconds();
-    
-    /**
-     * Whether support docker entrypoint.
-     *
-     * @return is support docker entrypoint or not
-     */
-    default boolean isSupportDockerEntrypoint() {
-        return true;
-    }
-    
-    /**
-     * Get default user when unsupported docker entrypoint.
+     * Get storage container create option.
      *
-     * @return default user
+     * @return storage container create option
      */
-    default Optional<String> getDefaultUserWhenUnsupportedDockerEntrypoint() {
-        return Optional.empty();
-    }
+    StorageContainerCreateOption getCreateOption();
     
     /**
-     * Get default password when unsupported docker entrypoint.
+     * Get storage container connect option.
      *
-     * @return default password
+     * @return storage container connect option
      */
-    default Optional<String> 
getDefaultPasswordWhenUnsupportedDockerEntrypoint() {
-        return Optional.empty();
-    }
+    StorageContainerConnectOption getConnectOption();
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/HiveDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerConnectOption.java
similarity index 78%
copy from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/HiveDataSourceEnvironment.java
copy to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerConnectOption.java
index f9dfb02a5c7..2282546a668 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/HiveDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerConnectOption.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.hive;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 
 /**
- * Data source environment for Hive.
+ * Storage container connect option for Hive.
  */
-public final class HiveDataSourceEnvironment implements DataSourceEnvironment {
+public final class HiveStorageContainerConnectOption implements 
StorageContainerConnectOption {
     
     @Override
     public String getDriverClassName() {
@@ -38,9 +38,4 @@ public final class HiveDataSourceEnvironment implements 
DataSourceEnvironment {
     public String getURL(final String host, final int port, final String 
dataSourceName) {
         return 
String.format("jdbc:hive2://%s:%s/%s?ssl=false&useUnicode=true&characterEncoding=utf-8",
 host, port, dataSourceName);
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "Hive";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/HiveStorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerCreateOption.java
similarity index 92%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/HiveStorageContainerOption.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerCreateOption.java
index 301b3dd2092..d3e17b03375 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/HiveStorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerCreateOption.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.hive;
 
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -27,9 +27,9 @@ import java.util.Map;
 import java.util.Optional;
 
 /**
- * Storage container option for Hive.
+ * Storage container craete option for Hive.
  */
-public final class HiveStorageContainerOption implements 
StorageContainerOption {
+public final class HiveStorageContainerCreateOption implements 
StorageContainerCreateOption {
     
     @Override
     public int getPort() {
@@ -99,9 +99,4 @@ public final class HiveStorageContainerOption implements 
StorageContainerOption
     public Optional<String> 
getDefaultPasswordWhenUnsupportedDockerEntrypoint() {
         return Optional.of("");
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "Hive";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/HiveDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerOption.java
similarity index 53%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/HiveDataSourceEnvironment.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerOption.java
index f9dfb02a5c7..0b271ba3f0d 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/HiveDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/hive/HiveStorageContainerOption.java
@@ -15,29 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.hive;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import lombok.Getter;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 
 /**
- * Data source environment for Hive.
+ * Storage container option for Hive.
  */
-public final class HiveDataSourceEnvironment implements DataSourceEnvironment {
+@Getter
+public final class HiveStorageContainerOption implements 
StorageContainerOption {
     
-    @Override
-    public String getDriverClassName() {
-        return "org.apache.hive.jdbc.HiveDriver";
-    }
+    private final StorageContainerCreateOption createOption = new 
HiveStorageContainerCreateOption();
     
-    @Override
-    public String getURL(final String host, final int port) {
-        return String.format("jdbc:hive2://%s:%s/", host, port);
-    }
-    
-    @Override
-    public String getURL(final String host, final int port, final String 
dataSourceName) {
-        return 
String.format("jdbc:hive2://%s:%s/%s?ssl=false&useUnicode=true&characterEncoding=utf-8",
 host, port, dataSourceName);
-    }
+    private final StorageContainerConnectOption connectOption = new 
HiveStorageContainerConnectOption();
     
     @Override
     public String getDatabaseType() {
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/MariaDBDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerConnectOption.java
similarity index 80%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/MariaDBDataSourceEnvironment.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerConnectOption.java
index b2aca9d8751..4e48b47f957 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/MariaDBDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerConnectOption.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mariadb;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 
 /**
- * Data source environment for MariaDB.
+ * Storage container connect option for MariaDB.
  */
-public final class MariaDBDataSourceEnvironment implements 
DataSourceEnvironment {
+public final class MariaDBStorageContainerConnectOption implements 
StorageContainerConnectOption {
     
     @Override
     public String getDriverClassName() {
@@ -42,9 +42,4 @@ public final class MariaDBDataSourceEnvironment implements 
DataSourceEnvironment
     private String getQueryProperties() {
         return 
"useSSL=false&useServerPrepStmts=true&useLocalSessionState=true&characterEncoding=utf-8&allowMultiQueries=true&rewriteBatchedStatements=true";
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "MariaDB";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/MariaDBStorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerCreateOption.java
similarity index 90%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/MariaDBStorageContainerOption.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerCreateOption.java
index e95b10316ca..657eedcc789 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/MariaDBStorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerCreateOption.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mariadb;
 
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 import org.apache.shardingsphere.test.e2e.env.container.util.ContainerUtils;
 
 import java.util.Collection;
@@ -28,9 +28,9 @@ import java.util.Map;
 import java.util.Optional;
 
 /**
- * Storage container option for MariaDB.
+ * Storage container craete option for MariaDB.
  */
-public final class MariaDBStorageContainerOption implements 
StorageContainerOption {
+public final class MariaDBStorageContainerCreateOption implements 
StorageContainerCreateOption {
     
     @Override
     public int getPort() {
@@ -84,9 +84,4 @@ public final class MariaDBStorageContainerOption implements 
StorageContainerOpti
     public long getStartupTimeoutSeconds() {
         return 120L;
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "MariaDB";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerOption.java
similarity index 53%
copy from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
copy to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerOption.java
index ccada15dc66..e2503a49e01 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mariadb/MariaDBStorageContainerOption.java
@@ -15,32 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mariadb;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import lombok.Getter;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 
 /**
- * Data source environment for openGauss.
+ * Storage container option for MariaDB.
  */
-public final class OpenGaussDataSourceEnvironment implements 
DataSourceEnvironment {
+@Getter
+public final class MariaDBStorageContainerOption implements 
StorageContainerOption {
     
-    @Override
-    public String getDriverClassName() {
-        return "org.opengauss.Driver";
-    }
+    private final StorageContainerCreateOption createOption = new 
MariaDBStorageContainerCreateOption();
     
-    @Override
-    public String getURL(final String host, final int port) {
-        return String.format("jdbc:opengauss://%s:%s/", host, port);
-    }
-    
-    @Override
-    public String getURL(final String host, final int port, final String 
dataSourceName) {
-        return String.format("jdbc:opengauss://%s:%s/%s?batchMode=OFF", host, 
port, dataSourceName);
-    }
+    private final StorageContainerConnectOption connectOption = new 
MariaDBStorageContainerConnectOption();
     
     @Override
     public String getDatabaseType() {
-        return "openGauss";
+        return "MariaDB";
     }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/MySQLDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerConnectOption.java
similarity index 81%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/MySQLDataSourceEnvironment.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerConnectOption.java
index e4a4c00fd3d..8f443ad93eb 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/MySQLDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerConnectOption.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mysql;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 
 /**
- * Data source environment for MySQL.
+ * Storage container connect option for MySQL.
  */
-public final class MySQLDataSourceEnvironment implements DataSourceEnvironment 
{
+public final class MySQLStorageContainerConnectOption implements 
StorageContainerConnectOption {
     
     @Override
     public String getDriverClassName() {
@@ -43,9 +43,4 @@ public final class MySQLDataSourceEnvironment implements 
DataSourceEnvironment {
         return 
"useSSL=true&requireSSL=true&enabledTLSProtocols=TLSv1.2,TLSv1.3&verifyServerCertificate=false"
                 + 
"&useServerPrepStmts=true&useLocalSessionState=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true";
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "MySQL";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/MySQLStorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerCreateOption.java
similarity index 91%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/MySQLStorageContainerOption.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerCreateOption.java
index f8e3948f573..c67ae95a737 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/MySQLStorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerCreateOption.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mysql;
 
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 import org.apache.shardingsphere.test.e2e.env.container.util.ContainerUtils;
 
 import java.util.Arrays;
@@ -30,9 +30,9 @@ import java.util.Map;
 import java.util.Optional;
 
 /**
- * Storage container option for MySQL.
+ * Storage container craete option for MySQL.
  */
-public final class MySQLStorageContainerOption implements 
StorageContainerOption {
+public final class MySQLStorageContainerCreateOption implements 
StorageContainerCreateOption {
     
     @Override
     public int getPort() {
@@ -90,9 +90,4 @@ public final class MySQLStorageContainerOption implements 
StorageContainerOption
     public long getStartupTimeoutSeconds() {
         return 120L;
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "MySQL";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerOption.java
similarity index 53%
copy from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
copy to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerOption.java
index ccada15dc66..027743b928e 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/mysql/MySQLStorageContainerOption.java
@@ -15,32 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mysql;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import lombok.Getter;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 
 /**
- * Data source environment for openGauss.
+ * Storage container option for MySQL.
  */
-public final class OpenGaussDataSourceEnvironment implements 
DataSourceEnvironment {
+@Getter
+public final class MySQLStorageContainerOption implements 
StorageContainerOption {
     
-    @Override
-    public String getDriverClassName() {
-        return "org.opengauss.Driver";
-    }
+    private final StorageContainerCreateOption createOption = new 
MySQLStorageContainerCreateOption();
     
-    @Override
-    public String getURL(final String host, final int port) {
-        return String.format("jdbc:opengauss://%s:%s/", host, port);
-    }
-    
-    @Override
-    public String getURL(final String host, final int port, final String 
dataSourceName) {
-        return String.format("jdbc:opengauss://%s:%s/%s?batchMode=OFF", host, 
port, dataSourceName);
-    }
+    private final StorageContainerConnectOption connectOption = new 
MySQLStorageContainerConnectOption();
     
     @Override
     public String getDatabaseType() {
-        return "openGauss";
+        return "MySQL";
     }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerConnectOption.java
similarity index 77%
copy from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
copy to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerConnectOption.java
index ccada15dc66..1c55ecfca92 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerConnectOption.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.opengauss;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 
 /**
- * Data source environment for openGauss.
+ * Storage container connect option for openGauss.
  */
-public final class OpenGaussDataSourceEnvironment implements 
DataSourceEnvironment {
+public final class OpenGaussStorageContainerConnectOption implements 
StorageContainerConnectOption {
     
     @Override
     public String getDriverClassName() {
@@ -38,9 +38,4 @@ public final class OpenGaussDataSourceEnvironment implements 
DataSourceEnvironme
     public String getURL(final String host, final int port, final String 
dataSourceName) {
         return String.format("jdbc:opengauss://%s:%s/%s?batchMode=OFF", host, 
port, dataSourceName);
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "openGauss";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/OpenGaussStorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerCreateOption.java
similarity index 90%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/OpenGaussStorageContainerOption.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerCreateOption.java
index f53c539615a..d32cc177c0d 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/OpenGaussStorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerCreateOption.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.opengauss;
 
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -28,9 +28,9 @@ import java.util.Map;
 import java.util.Optional;
 
 /**
- * Storage container option for openGauss.
+ * Storage container craete option for openGauss.
  */
-public final class OpenGaussStorageContainerOption implements 
StorageContainerOption {
+public final class OpenGaussStorageContainerCreateOption implements 
StorageContainerCreateOption {
     
     @Override
     public int getPort() {
@@ -81,9 +81,4 @@ public final class OpenGaussStorageContainerOption implements 
StorageContainerOp
     public long getStartupTimeoutSeconds() {
         return 120L;
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "openGauss";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerOption.java
similarity index 54%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerOption.java
index ccada15dc66..c381870526d 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/OpenGaussDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/opengauss/OpenGaussStorageContainerOption.java
@@ -15,29 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.opengauss;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import lombok.Getter;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 
 /**
- * Data source environment for openGauss.
+ * Storage container option for openGauss.
  */
-public final class OpenGaussDataSourceEnvironment implements 
DataSourceEnvironment {
+@Getter
+public final class OpenGaussStorageContainerOption implements 
StorageContainerOption {
     
-    @Override
-    public String getDriverClassName() {
-        return "org.opengauss.Driver";
-    }
+    private final StorageContainerCreateOption createOption = new 
OpenGaussStorageContainerCreateOption();
     
-    @Override
-    public String getURL(final String host, final int port) {
-        return String.format("jdbc:opengauss://%s:%s/", host, port);
-    }
-    
-    @Override
-    public String getURL(final String host, final int port, final String 
dataSourceName) {
-        return String.format("jdbc:opengauss://%s:%s/%s?batchMode=OFF", host, 
port, dataSourceName);
-    }
+    private final StorageContainerConnectOption connectOption = new 
OpenGaussStorageContainerConnectOption();
     
     @Override
     public String getDatabaseType() {
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/PostgreSQLDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerConnectOption.java
similarity index 77%
copy from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/PostgreSQLDataSourceEnvironment.java
copy to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerConnectOption.java
index 6b5ecf76150..a7719e892e8 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/PostgreSQLDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerConnectOption.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.postgresql;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 
 /**
- * Data source environment for PostgreSQL.
+ * Storage container connect option for PostgreSQL.
  */
-public final class PostgreSQLDataSourceEnvironment implements 
DataSourceEnvironment {
+public final class PostgreSQLStorageContainerConnectOption implements 
StorageContainerConnectOption {
     
     @Override
     public String getDriverClassName() {
@@ -38,9 +38,4 @@ public final class PostgreSQLDataSourceEnvironment implements 
DataSourceEnvironm
     public String getURL(final String host, final int port, final String 
dataSourceName) {
         return 
String.format("jdbc:postgresql://%s:%s/%s?ssl=on&sslmode=prefer", host, port, 
dataSourceName);
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "PostgreSQL";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/PostgreSQLStorageContainerOption.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerCreateOption.java
similarity index 90%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/PostgreSQLStorageContainerOption.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerCreateOption.java
index 4446ffe4fd8..e48aac92737 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/PostgreSQLStorageContainerOption.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerCreateOption.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.postgresql;
 
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -28,9 +28,9 @@ import java.util.Map;
 import java.util.Optional;
 
 /**
- * Storage container option for PostgreSQL.
+ * Storage container craete option for PostgreSQL.
  */
-public final class PostgreSQLStorageContainerOption implements 
StorageContainerOption {
+public final class PostgreSQLStorageContainerCreateOption implements 
StorageContainerCreateOption {
     
     @Override
     public int getPort() {
@@ -84,9 +84,4 @@ public final class PostgreSQLStorageContainerOption 
implements StorageContainerO
     public long getStartupTimeoutSeconds() {
         return 120L;
     }
-    
-    @Override
-    public String getDatabaseType() {
-        return "PostgreSQL";
-    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/PostgreSQLDataSourceEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerOption.java
similarity index 53%
rename from 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/PostgreSQLDataSourceEnvironment.java
rename to 
test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerOption.java
index 6b5ecf76150..a3be0e579a2 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/datasource/dialect/PostgreSQLDataSourceEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/option/dialect/postgresql/PostgreSQLStorageContainerOption.java
@@ -15,29 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect;
+package 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.postgresql;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import lombok.Getter;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 
 /**
- * Data source environment for PostgreSQL.
+ * Storage container option for PostgreSQL.
  */
-public final class PostgreSQLDataSourceEnvironment implements 
DataSourceEnvironment {
+@Getter
+public final class PostgreSQLStorageContainerOption implements 
StorageContainerOption {
     
-    @Override
-    public String getDriverClassName() {
-        return "org.postgresql.Driver";
-    }
+    private final StorageContainerCreateOption createOption = new 
PostgreSQLStorageContainerCreateOption();
     
-    @Override
-    public String getURL(final String host, final int port) {
-        return String.format("jdbc:postgresql://%s:%s/?ssl=on&sslmode=prefer", 
host, port);
-    }
-    
-    @Override
-    public String getURL(final String host, final int port, final String 
dataSourceName) {
-        return 
String.format("jdbc:postgresql://%s:%s/%s?ssl=on&sslmode=prefer", host, port, 
dataSourceName);
-    }
+    private final StorageContainerConnectOption connectOption = new 
PostgreSQLStorageContainerConnectOption();
     
     @Override
     public String getDatabaseType() {
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/DockerStorageContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/DockerStorageContainer.java
index 26dd53e88b9..6d788e7164e 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/DockerStorageContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/DockerStorageContainer.java
@@ -22,7 +22,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import lombok.Getter;
 import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.test.e2e.env.container.DockerITContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
@@ -34,7 +33,6 @@ import 
org.apache.shardingsphere.test.e2e.env.container.util.DockerImageVersion;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.JdbcConnectCheckingWaitStrategy;
 import org.apache.shardingsphere.test.e2e.env.container.util.SQLScriptUtils;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.StorageContainerUtils;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.scenario.database.DatabaseEnvironmentManager;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.scenario.path.ScenarioDataPath.Type;
 
@@ -63,8 +61,6 @@ public final class DockerStorageContainer extends 
DockerITContainer implements S
     
     private final int majorVersion;
     
-    private final DataSourceEnvironment dataSourceEnvironment;
-    
     @Getter
     private final Map<String, DataSource> actualDataSourceMap = new 
LinkedHashMap<>();
     
@@ -76,12 +72,11 @@ public final class DockerStorageContainer extends 
DockerITContainer implements S
         this.option = option;
         this.scenario = scenario;
         majorVersion = new 
DockerImageVersion(getContainerImage(containerImage, option)).getMajorVersion();
-        dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, 
option.getType());
     }
     
     private static String getContainerImage(final String containerImage, final 
StorageContainerOption option) {
         Preconditions.checkNotNull(option, "Can not support database type 
`%s`", option.getDatabaseType());
-        return Strings.isNullOrEmpty(containerImage) ? 
option.getDefaultImageName() : containerImage;
+        return Strings.isNullOrEmpty(containerImage) ? 
option.getCreateOption().getDefaultImageName() : containerImage;
     }
     
     @Override
@@ -96,56 +91,61 @@ public final class DockerStorageContainer extends 
DockerITContainer implements S
     }
     
     private void setCommands() {
-        String command = option.getCommand();
+        String command = option.getCreateOption().getCommand();
         if (!Strings.isNullOrEmpty(command)) {
             setCommand(command);
         }
     }
     
     private void addEnvironments() {
-        option.getEnvironments().forEach(this::addEnv);
+        option.getCreateOption().getEnvironments().forEach(this::addEnv);
     }
     
     private void mountConfigurations() {
-        mapResources(new 
MountConfigurationResourceGenerator(option).generate(majorVersion, scenario));
+        mapResources(new MountConfigurationResourceGenerator(option.getType(), 
option.getCreateOption()).generate(majorVersion, scenario));
     }
     
     private void mountSQLFiles() {
-        if (option.isSupportDockerEntrypoint()) {
-            mapResources(new 
MountSQLResourceGenerator(option).generate(majorVersion, scenario));
+        if (option.getCreateOption().isSupportDockerEntrypoint()) {
+            mapResources(new MountSQLResourceGenerator(option.getType(), 
option.getCreateOption()).generate(majorVersion, scenario));
         }
     }
     
     private void setPrivilegedMode() {
-        if (option.withPrivilegedMode()) {
+        if (option.getCreateOption().withPrivilegedMode()) {
             withPrivilegedMode(true);
         }
     }
     
     private void setWaitStrategy() {
-        String user = option.isSupportDockerEntrypoint() ? 
StorageContainerConstants.CHECK_READY_USER : 
option.getDefaultUserWhenUnsupportedDockerEntrypoint().orElse("");
-        String password = option.isSupportDockerEntrypoint() ? 
StorageContainerConstants.CHECK_READY_PASSWORD : 
option.getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse("");
+        String user = option.getCreateOption().isSupportDockerEntrypoint()
+                ? StorageContainerConstants.CHECK_READY_USER
+                : 
option.getCreateOption().getDefaultUserWhenUnsupportedDockerEntrypoint().orElse("");
+        String password = option.getCreateOption().isSupportDockerEntrypoint()
+                ? StorageContainerConstants.CHECK_READY_PASSWORD
+                : 
option.getCreateOption().getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse("");
         setWaitStrategy(new JdbcConnectCheckingWaitStrategy(() -> 
DriverManager.getConnection(getURL(), user, password)));
-        
withStartupTimeout(Duration.ofSeconds(option.getStartupTimeoutSeconds()));
+        
withStartupTimeout(Duration.ofSeconds(option.getCreateOption().getStartupTimeoutSeconds()));
     }
     
     private String getURL() {
-        return option.getDefaultDatabaseName(majorVersion)
-                .map(optional -> dataSourceEnvironment.getURL("localhost", 
getFirstMappedPort(), optional))
-                .orElseGet(() -> dataSourceEnvironment.getURL("localhost", 
getFirstMappedPort()));
+        return option.getCreateOption().getDefaultDatabaseName(majorVersion)
+                .map(optional -> option.getConnectOption().getURL("localhost", 
getFirstMappedPort(), optional))
+                .orElseGet(() -> option.getConnectOption().getURL("localhost", 
getFirstMappedPort()));
     }
     
     @SneakyThrows({SQLException.class, InterruptedException.class})
     @Override
     protected void containerIsStarted(final InspectContainerResponse 
containerInfo) {
-        if (option.isSupportDockerEntrypoint()) {
+        if (option.getCreateOption().isSupportDockerEntrypoint()) {
             return;
         }
         Thread.sleep(10000L);
         try (
-                Connection connection = 
DriverManager.getConnection(dataSourceEnvironment.getURL("localhost", 
getFirstMappedPort()),
-                        
option.getDefaultUserWhenUnsupportedDockerEntrypoint().orElse(""), 
option.getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse(""))) {
-            for (String each : new 
MountSQLResourceGenerator(option).generate(majorVersion, scenario).keySet()) {
+                Connection connection = 
DriverManager.getConnection(option.getConnectOption().getURL("localhost", 
getFirstMappedPort()),
+                        
option.getCreateOption().getDefaultUserWhenUnsupportedDockerEntrypoint().orElse(""),
+                        
option.getCreateOption().getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse("")))
 {
+            for (String each : new MountSQLResourceGenerator(option.getType(), 
option.getCreateOption()).generate(majorVersion, scenario).keySet()) {
                 SQLScriptUtils.execute(connection, each);
             }
         }
@@ -186,9 +186,8 @@ public final class DockerStorageContainer extends 
DockerITContainer implements S
      * @return JDBC URL
      */
     public String getJdbcUrl(final String dataSourceName) {
-        DataSourceEnvironment dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, 
option.getType());
-        String toBeConnectedDataSourceName = 
Strings.isNullOrEmpty(dataSourceName) ? 
option.getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName;
-        return dataSourceEnvironment.getURL(getHost(), getMappedPort(), 
toBeConnectedDataSourceName);
+        String toBeConnectedDataSourceName = 
Strings.isNullOrEmpty(dataSourceName) ? 
option.getCreateOption().getDefaultDatabaseName(majorVersion).orElse("") : 
dataSourceName;
+        return option.getConnectOption().getURL(getHost(), getMappedPort(), 
toBeConnectedDataSourceName);
     }
     
     /**
@@ -197,7 +196,7 @@ public final class DockerStorageContainer extends 
DockerITContainer implements S
      * @return exposed database container port
      */
     public int getExposedPort() {
-        return option.getPort();
+        return option.getCreateOption().getPort();
     }
     
     /**
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
index d129cf00869..f5507421597 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
@@ -24,11 +24,11 @@ import 
org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.StorageContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.mount.MountSQLResourceGenerator;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import org.apache.shardingsphere.test.e2e.env.container.util.SQLScriptUtils;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.StorageContainerUtils;
 import org.apache.shardingsphere.test.e2e.env.runtime.E2ETestEnvironment;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.NativeStorageEnvironment;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.scenario.database.DatabaseEnvironmentManager;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.type.scenario.path.ScenarioDataPath.Type;
@@ -77,9 +77,9 @@ public final class NativeStorageContainer implements 
StorageContainer {
     
     private void initDatabase() {
         if (null != option) {
-            DataSourceEnvironment dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, databaseType);
-            DataSource dataSource = 
StorageContainerUtils.generateDataSource(dataSourceEnvironment.getURL(env.getHost(),
 env.getPort()), env.getUser(), env.getPassword(), 2);
-            new MountSQLResourceGenerator(option).generate(0, 
scenario).keySet().forEach(each -> SQLScriptUtils.execute(dataSource, each));
+            StorageContainerConnectOption storageContainerConnectOption = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getConnectOption();
+            DataSource dataSource = 
StorageContainerUtils.generateDataSource(storageContainerConnectOption.getURL(env.getHost(),
 env.getPort()), env.getUser(), env.getPassword(), 2);
+            new MountSQLResourceGenerator(option.getType(), 
option.getCreateOption()).generate(0, scenario).keySet().forEach(each -> 
SQLScriptUtils.execute(dataSource, each));
         }
     }
     
@@ -91,10 +91,9 @@ public final class NativeStorageContainer implements 
StorageContainer {
     }
     
     private Map<String, DataSource> getDataSourceMap(final Collection<String> 
databaseNames) {
-        DataSourceEnvironment dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, databaseType);
         Map<String, DataSource> result = new HashMap<>(databaseNames.size(), 
1F);
         for (String each : databaseNames) {
-            DataSource dataSource = 
StorageContainerUtils.generateDataSource(dataSourceEnvironment.getURL(env.getHost(),
 env.getPort(), each), env.getUser(), env.getPassword(), 2);
+            DataSource dataSource = 
StorageContainerUtils.generateDataSource(option.getConnectOption().getURL(env.getHost(),
 env.getPort(), each), env.getUser(), env.getPassword(), 2);
             result.put(each, dataSource);
         }
         return result;
@@ -106,7 +105,7 @@ public final class NativeStorageContainer implements 
StorageContainer {
      * @return exposed port
      */
     public int getExposedPort() {
-        return null == option ? 0 : option.getPort();
+        return null == option ? 0 : option.getCreateOption().getPort();
     }
     
     @Override
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/util/StorageContainerUtils.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/util/StorageContainerUtils.java
index 7ca8aa67927..6890e49e92f 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/util/StorageContainerUtils.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/util/StorageContainerUtils.java
@@ -22,7 +22,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
 import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeFactory;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 
 import javax.sql.DataSource;
 
@@ -43,7 +43,7 @@ public final class StorageContainerUtils {
      */
     public static DataSource generateDataSource(final String jdbcUrl, final 
String username, final String password, final int maximumPoolSize) {
         HikariDataSource result = new HikariDataSource();
-        
result.setDriverClassName(DatabaseTypedSPILoader.getService(DataSourceEnvironment.class,
 DatabaseTypeFactory.get(jdbcUrl)).getDriverClassName());
+        
result.setDriverClassName(DatabaseTypedSPILoader.getService(StorageContainerOption.class,
 DatabaseTypeFactory.get(jdbcUrl)).getConnectOption().getDriverClassName());
         result.setJdbcUrl(jdbcUrl);
         result.setUsername(username);
         result.setPassword(password);
diff --git 
a/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption
 
b/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption
index f13a2ca23ea..6ef86592c34 100644
--- 
a/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption
+++ 
b/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption
@@ -15,8 +15,8 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.MySQLStorageContainerOption
-org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.PostgreSQLStorageContainerOption
-org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.MariaDBStorageContainerOption
-org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.OpenGaussStorageContainerOption
-org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.HiveStorageContainerOption
+org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mysql.MySQLStorageContainerOption
+org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.postgresql.PostgreSQLStorageContainerOption
+org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mariadb.MariaDBStorageContainerOption
+org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.opengauss.OpenGaussStorageContainerOption
+org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.hive.HiveStorageContainerOption
diff --git 
a/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment
 
b/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment
deleted file mode 100644
index 5b253bc8d61..00000000000
--- 
a/test/e2e/env/src/test/resources/META-INF/services/org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect.MySQLDataSourceEnvironment
-org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect.PostgreSQLDataSourceEnvironment
-org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect.MariaDBDataSourceEnvironment
-org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect.OpenGaussDataSourceEnvironment
-org.apache.shardingsphere.test.e2e.env.runtime.datasource.dialect.HiveDataSourceEnvironment
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/PipelineContainerComposer.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/PipelineContainerComposer.java
index ebb5e862291..e4518b589d3 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/PipelineContainerComposer.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/PipelineContainerComposer.java
@@ -43,9 +43,10 @@ import 
org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import 
org.apache.shardingsphere.single.yaml.config.YamlSingleRuleConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.ProxyContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.type.DockerStorageContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.util.StorageContainerUtils;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.command.ExtraSQLCommand;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.env.PipelineE2EEnvironment;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.env.enums.PipelineEnvTypeEnum;
@@ -279,14 +280,14 @@ public final class PipelineContainerComposer implements 
AutoCloseable {
      * @return actual JDBC URL template
      */
     public String getActualJdbcUrlTemplate(final String databaseName, final 
boolean isInContainer, final int storageContainerIndex) {
-        DataSourceEnvironment dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, databaseType);
+        StorageContainerConnectOption option = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getConnectOption();
         if (PipelineEnvTypeEnum.DOCKER == 
PipelineE2EEnvironment.getInstance().getItEnvType()) {
             DockerStorageContainer storageContainer = 
((PipelineDockerContainerComposer) 
containerComposer).getStorageContainers().get(storageContainerIndex);
             return isInContainer
-                    ? 
dataSourceEnvironment.getURL(storageContainer.getNetworkAliases().get(0), 
storageContainer.getExposedPort(), databaseName)
+                    ? 
option.getURL(storageContainer.getNetworkAliases().get(0), 
storageContainer.getExposedPort(), databaseName)
                     : storageContainer.getJdbcUrl(databaseName);
         }
-        return dataSourceEnvironment.getURL("127.0.0.1", 
PipelineE2EEnvironment.getInstance().getActualDatabasePort(databaseType), 
databaseName);
+        return option.getURL("127.0.0.1", 
PipelineE2EEnvironment.getInstance().getActualDatabasePort(databaseType), 
databaseName);
     }
     
     /**
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/env/PipelineE2EEnvironment.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/env/PipelineE2EEnvironment.java
index 39b740616ba..6c07a64ce38 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/env/PipelineE2EEnvironment.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/env/PipelineE2EEnvironment.java
@@ -71,7 +71,7 @@ public final class PipelineE2EEnvironment {
      * @return actual database port
      */
     public int getActualDatabasePort(final DatabaseType databaseType) {
-        int defaultPort = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getPort();
+        int defaultPort = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getCreateOption().getPort();
         return 
Integer.parseInt(props.getProperty(String.format("pipeline.it.native.%s.port", 
databaseType.getType().toLowerCase()), String.valueOf(defaultPort)));
     }
     
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
index 3df786c5a84..4dcb96218fb 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
@@ -29,7 +29,6 @@ import 
org.apache.shardingsphere.test.e2e.env.container.governance.GovernanceCon
 import 
org.apache.shardingsphere.test.e2e.env.container.governance.option.GovernanceContainerOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.type.DockerStorageContainer;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.env.PipelineE2EEnvironment;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.env.enums.PipelineProxyTypeEnum;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.PipelineBaseContainerComposer;
@@ -91,7 +90,7 @@ public final class PipelineDockerContainerComposer extends 
PipelineBaseContainer
             host = proxyContainer.getHost();
             port = proxyContainer.getFirstMappedPort();
         }
-        return DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, 
ProxyDatabaseTypeUtils.getProxyDatabaseType(databaseType)).getURL(host, port, 
databaseName);
+        return DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
ProxyDatabaseTypeUtils.getProxyDatabaseType(databaseType)).getConnectOption().getURL(host,
 port, databaseName);
     }
     
     @Override
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/DialectPipelineNativeContainerDropTableOption.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/DialectPipelineNativeContainerDropTableOption.java
index dd35b787f60..ce22f451688 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/DialectPipelineNativeContainerDropTableOption.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/DialectPipelineNativeContainerDropTableOption.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.containe
 
 import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 
 import java.util.Optional;
 
@@ -32,12 +32,12 @@ public interface 
DialectPipelineNativeContainerDropTableOption extends DatabaseT
     /**
      * Get JDBC URL.
      *
-     * @param dataSourceEnvironment data source environment
+     * @param storageContainerConnectOption data source environment
      * @param actualDatabasePort actual database port
      * @param databaseName database name
      * @return JDBC URL
      */
-    String getJdbcUrl(DataSourceEnvironment dataSourceEnvironment, int 
actualDatabasePort, String databaseName);
+    String getJdbcUrl(StorageContainerConnectOption 
storageContainerConnectOption, int actualDatabasePort, String databaseName);
     
     /**
      * Get query all schema and table mapper SQL.
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/PipelineNativeContainerComposer.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/PipelineNativeContainerComposer.java
index c39cce2bc28..3225d7c51cc 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/PipelineNativeContainerComposer.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/PipelineNativeContainerComposer.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.containe
 import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.env.PipelineE2EEnvironment;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.PipelineBaseContainerComposer;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.util.ProxyDatabaseTypeUtils;
@@ -57,7 +57,7 @@ public final class PipelineNativeContainerComposer extends 
PipelineBaseContainer
         int actualDatabasePort = ENV.getActualDatabasePort(databaseType);
         String username = ENV.getActualDataSourceUsername(databaseType);
         String password = ENV.getActualDataSourcePassword(databaseType);
-        String jdbcUrl = 
dropTableOption.getJdbcUrl(DatabaseTypedSPILoader.getService(DataSourceEnvironment.class,
 databaseType), actualDatabasePort, databaseName);
+        String jdbcUrl = 
dropTableOption.getJdbcUrl(DatabaseTypedSPILoader.getService(StorageContainerOption.class,
 databaseType).getConnectOption(), actualDatabasePort, databaseName);
         try (Connection connection = DriverManager.getConnection(jdbcUrl, 
username, password)) {
             dropTable(connection, databaseName);
         }
@@ -91,7 +91,7 @@ public final class PipelineNativeContainerComposer extends 
PipelineBaseContainer
     
     @Override
     public String getProxyJdbcUrl(final String databaseName) {
-        return DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, 
ProxyDatabaseTypeUtils.getProxyDatabaseType(databaseType)).getURL("localhost", 
3307, databaseName);
+        return DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
ProxyDatabaseTypeUtils.getProxyDatabaseType(databaseType)).getConnectOption().getURL("localhost",
 3307, databaseName);
     }
     
     @Override
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MariaDBPipelineNativeContainerDropTableOption.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MariaDBPipelineNativeContainerDropTableOption.java
index 955fa33b3f4..d9286443a23 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MariaDBPipelineNativeContainerDropTableOption.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MariaDBPipelineNativeContainerDropTableOption.java
@@ -17,7 +17,7 @@
 
 package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.dialect;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.DialectPipelineNativeContainerDropTableOption;
 
 import java.util.Optional;
@@ -30,8 +30,8 @@ public final class 
MariaDBPipelineNativeContainerDropTableOption implements Dial
     private final DialectPipelineNativeContainerDropTableOption delegated = 
new MySQLPipelineNativeContainerDropTableOption();
     
     @Override
-    public String getJdbcUrl(final DataSourceEnvironment 
dataSourceEnvironment, final int actualDatabasePort, final String databaseName) 
{
-        return delegated.getJdbcUrl(dataSourceEnvironment, actualDatabasePort, 
databaseName);
+    public String getJdbcUrl(final StorageContainerConnectOption 
storageContainerConnectOption, final int actualDatabasePort, final String 
databaseName) {
+        return delegated.getJdbcUrl(storageContainerConnectOption, 
actualDatabasePort, databaseName);
     }
     
     @Override
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MySQLPipelineNativeContainerDropTableOption.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MySQLPipelineNativeContainerDropTableOption.java
index 0676b052c00..bcdd167f06d 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MySQLPipelineNativeContainerDropTableOption.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/MySQLPipelineNativeContainerDropTableOption.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.containe
 import 
org.apache.shardingsphere.database.connector.core.jdbcurl.appender.JdbcUrlAppender;
 import org.apache.shardingsphere.infra.util.props.PropertiesBuilder;
 import org.apache.shardingsphere.infra.util.props.PropertiesBuilder.Property;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.DialectPipelineNativeContainerDropTableOption;
 
 import java.util.Optional;
@@ -31,8 +31,8 @@ import java.util.Optional;
 public final class MySQLPipelineNativeContainerDropTableOption implements 
DialectPipelineNativeContainerDropTableOption {
     
     @Override
-    public String getJdbcUrl(final DataSourceEnvironment 
dataSourceEnvironment, final int actualDatabasePort, final String databaseName) 
{
-        return new 
JdbcUrlAppender().appendQueryProperties(dataSourceEnvironment.getURL("localhost",
 actualDatabasePort, databaseName),
+    public String getJdbcUrl(final StorageContainerConnectOption 
storageContainerConnectOption, final int actualDatabasePort, final String 
databaseName) {
+        return new 
JdbcUrlAppender().appendQueryProperties(storageContainerConnectOption.getURL("localhost",
 actualDatabasePort, databaseName),
                 PropertiesBuilder.build(new 
Property("allowPublicKeyRetrieval", Boolean.TRUE.toString())));
     }
     
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OpenGaussPipelineNativeContainerDropTableOption.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OpenGaussPipelineNativeContainerDropTableOption.java
index 9e5bed2ee75..fac693a5cbf 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OpenGaussPipelineNativeContainerDropTableOption.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OpenGaussPipelineNativeContainerDropTableOption.java
@@ -17,7 +17,7 @@
 
 package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.dialect;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.DialectPipelineNativeContainerDropTableOption;
 
 import java.util.Optional;
@@ -30,8 +30,8 @@ public final class 
OpenGaussPipelineNativeContainerDropTableOption implements Di
     private final DialectPipelineNativeContainerDropTableOption delegated = 
new PostgreSQLPipelineNativeContainerDropTableOption();
     
     @Override
-    public String getJdbcUrl(final DataSourceEnvironment 
dataSourceEnvironment, final int actualDatabasePort, final String databaseName) 
{
-        return delegated.getJdbcUrl(dataSourceEnvironment, actualDatabasePort, 
databaseName);
+    public String getJdbcUrl(final StorageContainerConnectOption 
storageContainerConnectOption, final int actualDatabasePort, final String 
databaseName) {
+        return delegated.getJdbcUrl(storageContainerConnectOption, 
actualDatabasePort, databaseName);
     }
     
     @Override
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OraclePipelineNativeContainerDropTableOption.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OraclePipelineNativeContainerDropTableOption.java
index 8fc7b9aca57..879710f8758 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OraclePipelineNativeContainerDropTableOption.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/OraclePipelineNativeContainerDropTableOption.java
@@ -17,7 +17,7 @@
 
 package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.dialect;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.DialectPipelineNativeContainerDropTableOption;
 
 import java.util.Optional;
@@ -28,8 +28,8 @@ import java.util.Optional;
 public final class OraclePipelineNativeContainerDropTableOption implements 
DialectPipelineNativeContainerDropTableOption {
     
     @Override
-    public String getJdbcUrl(final DataSourceEnvironment 
dataSourceEnvironment, final int actualDatabasePort, final String databaseName) 
{
-        return dataSourceEnvironment.getURL("localhost", actualDatabasePort, 
"");
+    public String getJdbcUrl(final StorageContainerConnectOption 
storageContainerConnectOption, final int actualDatabasePort, final String 
databaseName) {
+        return storageContainerConnectOption.getURL("localhost", 
actualDatabasePort, "");
     }
     
     @Override
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/PostgreSQLPipelineNativeContainerDropTableOption.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/PostgreSQLPipelineNativeContainerDropTableOption.java
index 083363f0baa..5ea3ce0e33a 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/PostgreSQLPipelineNativeContainerDropTableOption.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/natived/dialect/PostgreSQLPipelineNativeContainerDropTableOption.java
@@ -17,7 +17,7 @@
 
 package 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.dialect;
 
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
 import 
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.container.compose.natived.DialectPipelineNativeContainerDropTableOption;
 
 import java.util.Optional;
@@ -28,8 +28,8 @@ import java.util.Optional;
 public final class PostgreSQLPipelineNativeContainerDropTableOption implements 
DialectPipelineNativeContainerDropTableOption {
     
     @Override
-    public String getJdbcUrl(final DataSourceEnvironment 
dataSourceEnvironment, final int actualDatabasePort, final String databaseName) 
{
-        return dataSourceEnvironment.getURL("localhost", actualDatabasePort, 
databaseName);
+    public String getJdbcUrl(final StorageContainerConnectOption 
storageContainerConnectOption, final int actualDatabasePort, final String 
databaseName) {
+        return storageContainerConnectOption.getURL("localhost", 
actualDatabasePort, databaseName);
     }
     
     @Override
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
index 1a4f7b32314..cb99070fdcd 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
@@ -25,8 +25,9 @@ import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoa
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.test.e2e.env.container.adapter.enums.AdapterType;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerConnectOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import 
org.apache.shardingsphere.test.e2e.env.container.storage.type.DockerStorageContainer;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.datasource.DataSourceEnvironment;
 import 
org.apache.shardingsphere.test.e2e.operation.transaction.cases.base.BaseTransactionTestCase;
 import 
org.apache.shardingsphere.test.e2e.operation.transaction.cases.base.BaseTransactionTestCase.TransactionTestCaseParameter;
 import 
org.apache.shardingsphere.test.e2e.operation.transaction.engine.command.CommonSQLCommand;
@@ -276,12 +277,12 @@ public abstract class TransactionBaseE2EIT {
     }
     
     private String getActualJdbcUrlTemplate(final String databaseName, final 
TransactionContainerComposer containerComposer) {
-        DataSourceEnvironment dataSourceEnvironment = 
DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, 
containerComposer.getDatabaseType());
+        StorageContainerConnectOption option = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
containerComposer.getDatabaseType()).getConnectOption();
         if (ENV.getItEnvType() == TransactionE2EEnvTypeEnum.DOCKER) {
             DockerStorageContainer storageContainer = (DockerStorageContainer) 
((TransactionDockerContainerComposer) 
containerComposer.getContainerComposer()).getStorageContainer();
-            return 
dataSourceEnvironment.getURL(containerComposer.getDatabaseType().getType().toLowerCase()
 + ".host", storageContainer.getExposedPort(), databaseName);
+            return 
option.getURL(containerComposer.getDatabaseType().getType().toLowerCase() + 
".host", storageContainer.getExposedPort(), databaseName);
         }
-        return dataSourceEnvironment.getURL("127.0.0.1", 
ENV.getActualDataSourceDefaultPort(containerComposer.getDatabaseType()), 
databaseName);
+        return option.getURL("127.0.0.1", 
ENV.getActualDataSourceDefaultPort(containerComposer.getDatabaseType()), 
databaseName);
     }
     
     /**
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
index 53258eff21f..d3353bd6e3a 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
@@ -23,9 +23,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.ProxyContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.MySQLStorageContainerOption;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.OpenGaussStorageContainerOption;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.PostgreSQLStorageContainerOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mysql.MySQLStorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.opengauss.OpenGaussStorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.postgresql.PostgreSQLStorageContainerCreateOption;
 import 
org.apache.shardingsphere.test.e2e.operation.transaction.env.enums.TransactionE2EEnvTypeEnum;
 import 
org.apache.shardingsphere.test.e2e.operation.transaction.env.enums.TransactionTestCaseRegistry;
 
@@ -113,11 +113,11 @@ public final class TransactionE2EEnvironment {
     public int getActualDataSourceDefaultPort(final DatabaseType databaseType) 
{
         switch (databaseType.getType()) {
             case "MySQL":
-                return 
Integer.parseInt(props.getOrDefault("transaction.it.native.mysql.port", new 
MySQLStorageContainerOption().getPort()).toString());
+                return 
Integer.parseInt(props.getOrDefault("transaction.it.native.mysql.port", new 
MySQLStorageContainerCreateOption().getPort()).toString());
             case "PostgreSQL":
-                return 
Integer.parseInt(props.getOrDefault("transaction.it.native.postgresql.port", 
new PostgreSQLStorageContainerOption().getPort()).toString());
+                return 
Integer.parseInt(props.getOrDefault("transaction.it.native.postgresql.port", 
new PostgreSQLStorageContainerCreateOption().getPort()).toString());
             case "openGauss":
-                return 
Integer.parseInt(props.getOrDefault("transaction.it.native.opengauss.port", new 
OpenGaussStorageContainerOption().getPort()).toString());
+                return 
Integer.parseInt(props.getOrDefault("transaction.it.native.opengauss.port", new 
OpenGaussStorageContainerCreateOption().getPort()).toString());
             default:
                 throw new 
UnsupportedOperationException(String.format("Unsupported database type: `%s`", 
databaseType.getType()));
         }

Reply via email to