This is an automated email from the ASF dual-hosted git repository.
wenjun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new a5284e4024 Remove mapper usage in tools (#15073)
a5284e4024 is described below
commit a5284e40242eea7597e7be27d62e3133546e7073
Author: Wenjun Ruan <[email protected]>
AuthorDate: Wed Oct 25 22:58:47 2023 +0800
Remove mapper usage in tools (#15073)
---
.../src/main/resources/application.yaml | 14 ++
.../src/main/resources/application.yaml | 14 ++
.../src/test/resources/application.yaml | 13 +
.../dao/plugin/api/DaoPluginConfiguration.java | 3 +
.../dao/plugin/api/dialect/DatabaseDialect.java | 26 ++
.../dao/plugin/h2/H2DaoPluginConfiguration.java | 7 +
.../dao/plugin/h2/dialect/H2Dialect.java | 33 +++
.../plugin/mysql/MysqlDaoPluginConfiguration.java | 7 +
.../dao/plugin/mysql/dialect/MysqlDialect.java | 61 +++++
.../PostgresqlDaoPluginConfiguration.java | 7 +
.../postgresql/dialect/PostgresqlDialect.java | 79 ++----
.../dolphinscheduler/dao/DaoConfiguration.java | 48 ++++
.../dao/datasource/SpringConnectionFactory.java | 111 ---------
.../dao/upgrade/ProcessDefinitionDaoTest.java | 60 -----
.../dao/upgrade/WorkerGroupDaoTest.java | 50 ----
.../src/test/resources/application.yaml | 13 +
.../src/main/resources/application.yaml | 15 ++
.../src/main/resources/application.yaml | 13 +
dolphinscheduler-tools/pom.xml | 3 -
.../tools/datasource/DolphinSchedulerManager.java | 46 ++--
.../tools/datasource/InitDolphinScheduler.java | 56 -----
.../tools/datasource/dao}/JsonSplitDao.java | 3 +-
.../tools/datasource/dao/MySQLUpgradeDao.java | 90 -------
.../datasource/dao}/ProcessDefinitionDao.java | 3 +-
.../tools/datasource/dao}/ProjectDao.java | 3 +-
.../tools/datasource/dao/ResourceDao.java | 1 +
.../tools/datasource/dao}/ScheduleDao.java | 3 +-
.../tools/datasource/dao}/WorkerGroupDao.java | 3 +-
.../datasource/{dao => upgrader}/UpgradeDao.java | 52 ++--
.../v130/V130DolphinSchedulerUpgrader.java | 4 +-
.../v132/V132DolphinSchedulerUpgrader.java | 2 +-
.../v200/V200DolphinSchedulerUpgrader.java | 10 +-
.../v320/V320DolphinSchedulerUpgrader.java | 275 +++++++++++++++------
.../tools/datasource/utils}/SchemaUtils.java | 2 +-
.../src/main/resources/application.yaml | 14 ++
.../tools/datasource/utils}/SchemaUtilsTest.java | 36 +--
.../src/test/resources/application-mysql.yaml | 13 +
.../src/test/resources/application-postgresql.yaml | 13 +
.../src/test/resources/logback.xml | 2 +-
.../3.3.0_schema/mysql/dolphinscheduler_ddl.sql | 16 ++
.../mysql/dolphinscheduler_ddl_post.sql | 16 ++
.../3.3.0_schema/mysql/dolphinscheduler_dml.sql | 16 ++
.../postgresql/dolphinscheduler_ddl.sql | 16 ++
.../postgresql/dolphinscheduler_ddl_post.sql | 16 ++
.../postgresql/dolphinscheduler_dml.sql | 16 ++
45 files changed, 718 insertions(+), 586 deletions(-)
diff --git
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
index 5ea68f9588..e9d2554832 100644
---
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
+++
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml
@@ -40,6 +40,20 @@ spring:
leak-detection-threshold: 0
initialization-fail-timeout: 1
+# Mybatis-plus configuration, you don't need to change it
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
server:
port: 50053
diff --git a/dolphinscheduler-api/src/main/resources/application.yaml
b/dolphinscheduler-api/src/main/resources/application.yaml
index e58983f0a3..c93fd99a59 100644
--- a/dolphinscheduler-api/src/main/resources/application.yaml
+++ b/dolphinscheduler-api/src/main/resources/application.yaml
@@ -88,6 +88,20 @@ springdoc:
path: /swagger-ui.html
packages-to-scan: org.apache.dolphinscheduler.api
+# Mybatis-plus configuration, you don't need to change it
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
management:
endpoints:
web:
diff --git a/dolphinscheduler-api/src/test/resources/application.yaml
b/dolphinscheduler-api/src/test/resources/application.yaml
index b11c16d362..26536d631f 100644
--- a/dolphinscheduler-api/src/test/resources/application.yaml
+++ b/dolphinscheduler-api/src/test/resources/application.yaml
@@ -29,6 +29,19 @@ spring:
username: sa
password: ""
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
registry:
type: zookeeper
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/DaoPluginConfiguration.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/DaoPluginConfiguration.java
index ba3577f10e..36443b012a 100644
---
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/DaoPluginConfiguration.java
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/DaoPluginConfiguration.java
@@ -20,6 +20,7 @@
package org.apache.dolphinscheduler.dao.plugin.api;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
import org.apache.dolphinscheduler.dao.plugin.api.monitor.DatabaseMonitor;
import com.baomidou.mybatisplus.annotation.DbType;
@@ -33,4 +34,6 @@ public interface DaoPluginConfiguration {
DatabaseMonitor databaseMonitor();
+ DatabaseDialect databaseDialect();
+
}
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/dialect/DatabaseDialect.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/dialect/DatabaseDialect.java
new file mode 100644
index 0000000000..a07f050fda
--- /dev/null
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-api/src/main/java/org/apache/dolphinscheduler/dao/plugin/api/dialect/DatabaseDialect.java
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+package org.apache.dolphinscheduler.dao.plugin.api.dialect;
+
+public interface DatabaseDialect {
+
+ boolean tableExists(String tableName);
+
+ boolean columnExists(String tableName, String columnName);
+
+}
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/H2DaoPluginConfiguration.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/H2DaoPluginConfiguration.java
index dca8b29a04..9aea94f77d 100644
---
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/H2DaoPluginConfiguration.java
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/H2DaoPluginConfiguration.java
@@ -21,7 +21,9 @@
package org.apache.dolphinscheduler.dao.plugin.h2;
import org.apache.dolphinscheduler.dao.plugin.api.DaoPluginConfiguration;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
import org.apache.dolphinscheduler.dao.plugin.api.monitor.DatabaseMonitor;
+import org.apache.dolphinscheduler.dao.plugin.h2.dialect.H2Dialect;
import org.apache.dolphinscheduler.dao.plugin.h2.monitor.H2Monitor;
import javax.sql.DataSource;
@@ -49,4 +51,9 @@ public class H2DaoPluginConfiguration implements
DaoPluginConfiguration {
return new H2Monitor(dataSource);
}
+ @Override
+ public DatabaseDialect databaseDialect() {
+ return new H2Dialect();
+ }
+
}
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/dialect/H2Dialect.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/dialect/H2Dialect.java
new file mode 100644
index 0000000000..2cb3f60529
--- /dev/null
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-h2/src/main/java/org/apache/dolphinscheduler/dao/plugin/h2/dialect/H2Dialect.java
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+package org.apache.dolphinscheduler.dao.plugin.h2.dialect;
+
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
+
+public class H2Dialect implements DatabaseDialect {
+
+ @Override
+ public boolean tableExists(String tableName) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean columnExists(String tableName, String columnName) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/MysqlDaoPluginConfiguration.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/MysqlDaoPluginConfiguration.java
index 25f6c34374..8b37fca67b 100644
---
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/MysqlDaoPluginConfiguration.java
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/MysqlDaoPluginConfiguration.java
@@ -20,7 +20,9 @@
package org.apache.dolphinscheduler.dao.plugin.mysql;
import org.apache.dolphinscheduler.dao.plugin.api.DaoPluginConfiguration;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
import org.apache.dolphinscheduler.dao.plugin.api.monitor.DatabaseMonitor;
+import org.apache.dolphinscheduler.dao.plugin.mysql.dialect.MysqlDialect;
import org.apache.dolphinscheduler.dao.plugin.mysql.monitor.MysqlMonitor;
import javax.sql.DataSource;
@@ -47,4 +49,9 @@ public class MysqlDaoPluginConfiguration implements
DaoPluginConfiguration {
public DatabaseMonitor databaseMonitor() {
return new MysqlMonitor(dataSource);
}
+
+ @Override
+ public DatabaseDialect databaseDialect() {
+ return new MysqlDialect(dataSource);
+ }
}
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/dialect/MysqlDialect.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/dialect/MysqlDialect.java
new file mode 100644
index 0000000000..ef8c20e021
--- /dev/null
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-mysql/src/main/java/org/apache/dolphinscheduler/dao/plugin/mysql/dialect/MysqlDialect.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ */
+
+package org.apache.dolphinscheduler.dao.plugin.mysql.dialect;
+
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+
+import javax.sql.DataSource;
+
+import lombok.SneakyThrows;
+
+public class MysqlDialect implements DatabaseDialect {
+
+ private final DataSource dataSource;
+
+ public MysqlDialect(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @SneakyThrows
+ @Override
+ public boolean tableExists(String tableName) {
+ try (
+ Connection conn = dataSource.getConnection();
+ ResultSet rs = conn.getMetaData().getTables(conn.getCatalog(),
conn.getSchema(), tableName, null)) {
+ return rs.next();
+ }
+ }
+
+ @SneakyThrows
+ @Override
+ public boolean columnExists(String tableName, String columnName) {
+ try (
+ Connection conn = dataSource.getConnection();
+ ResultSet rs =
+ conn.getMetaData().getColumns(conn.getCatalog(),
conn.getSchema(), tableName, columnName)) {
+ return rs.next();
+
+ }
+ }
+}
diff --git
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/PostgresqlDaoPluginConfiguration.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/PostgresqlDaoPluginConfiguration.java
index ee9c290f36..e57c84fab9 100644
---
a/dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/PostgresqlDaoPluginConfiguration.java
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/PostgresqlDaoPluginConfiguration.java
@@ -21,7 +21,9 @@
package org.apache.dolphinscheduler.dao.plugin.postgresql;
import org.apache.dolphinscheduler.dao.plugin.api.DaoPluginConfiguration;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
import org.apache.dolphinscheduler.dao.plugin.api.monitor.DatabaseMonitor;
+import
org.apache.dolphinscheduler.dao.plugin.postgresql.dialect.PostgresqlDialect;
import
org.apache.dolphinscheduler.dao.plugin.postgresql.monitor.PostgresqlMonitor;
import javax.sql.DataSource;
@@ -48,4 +50,9 @@ public class PostgresqlDaoPluginConfiguration implements
DaoPluginConfiguration
public DatabaseMonitor databaseMonitor() {
return new PostgresqlMonitor(dataSource);
}
+
+ @Override
+ public DatabaseDialect databaseDialect() {
+ return new PostgresqlDialect(dataSource);
+ }
}
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/PostgreSQLUpgradeDao.java
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/dialect/PostgresqlDialect.java
similarity index 53%
rename from
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/PostgreSQLUpgradeDao.java
rename to
dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/dialect/PostgresqlDialect.java
index c2d4b637f1..7cda5294a2 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/PostgreSQLUpgradeDao.java
+++
b/dolphinscheduler-dao-plugin/dolphinscheduler-dao-postgresql/src/main/java/org/apache/dolphinscheduler/dao/plugin/postgresql/dialect/PostgresqlDialect.java
@@ -15,9 +15,9 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.tools.datasource.dao;
+package org.apache.dolphinscheduler.dao.plugin.postgresql.dialect;
-import org.apache.dolphinscheduler.spi.enums.DbType;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -26,82 +26,47 @@ import java.sql.SQLException;
import javax.sql.DataSource;
-import lombok.extern.slf4j.Slf4j;
+import lombok.SneakyThrows;
-import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Service;
+public class PostgresqlDialect implements DatabaseDialect {
-@Service
-@Slf4j
-@Profile("postgresql")
-public class PostgreSQLUpgradeDao extends UpgradeDao {
+ private final DataSource dataSource;
- private PostgreSQLUpgradeDao(DataSource dataSource) {
- super(dataSource);
+ public PostgresqlDialect(DataSource dataSource) {
+ this.dataSource = dataSource;
}
+ @SneakyThrows
@Override
- protected String initSqlPath() {
- return "create/release-1.2.0_schema/postgresql";
- }
-
- @Override
- public DbType getDbType() {
- return DbType.POSTGRESQL;
- }
-
- public String getSchema() {
+ public boolean tableExists(String tableName) {
try (
Connection conn = dataSource.getConnection();
- PreparedStatement pstmt = conn.prepareStatement("select
current_schema()");
- ResultSet resultSet = pstmt.executeQuery()) {
- while (resultSet.next()) {
- if (resultSet.isFirst()) {
- return resultSet.getString(1);
- }
- }
-
- } catch (SQLException e) {
- log.error(e.getMessage(), e);
+ ResultSet rs = conn.getMetaData().getTables(conn.getCatalog(),
getSchema(), tableName, null)) {
+ return rs.next();
}
- return "";
}
- /**
- * determines whether a table exists
- *
- * @param tableName tableName
- * @return if table exist return true,else return false
- */
+ @SneakyThrows
@Override
- public boolean isExistsTable(String tableName) {
+ public boolean columnExists(String tableName, String columnName) {
try (
Connection conn = dataSource.getConnection();
ResultSet rs = conn.getMetaData().getTables(conn.getCatalog(),
getSchema(), tableName, null)) {
return rs.next();
- } catch (SQLException e) {
- log.error(e.getMessage(), e);
- throw new RuntimeException(e.getMessage(), e);
}
}
- /**
- * determines whether a field exists in the specified table
- *
- * @param tableName tableName
- * @param columnName columnName
- * @return if column name exist return true,else return false
- */
- @Override
- public boolean isExistsColumn(String tableName, String columnName) {
+ private String getSchema() throws SQLException {
try (
Connection conn = dataSource.getConnection();
- ResultSet rs =
conn.getMetaData().getColumns(conn.getCatalog(), getSchema(), tableName,
columnName)) {
- return rs.next();
- } catch (SQLException e) {
- log.error(e.getMessage(), e);
- throw new RuntimeException(e.getMessage(), e);
+ PreparedStatement pstmt = conn.prepareStatement("select
current_schema()");
+ ResultSet resultSet = pstmt.executeQuery()) {
+ while (resultSet.next()) {
+ if (resultSet.isFirst()) {
+ return resultSet.getString(1);
+ }
+ }
}
+ return "";
}
-
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/DaoConfiguration.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/DaoConfiguration.java
index d1de5630a8..2587bf0dc2 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/DaoConfiguration.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/DaoConfiguration.java
@@ -20,12 +20,60 @@
package org.apache.dolphinscheduler.dao;
+import org.apache.dolphinscheduler.dao.plugin.api.DaoPluginConfiguration;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
+import org.apache.dolphinscheduler.dao.plugin.api.monitor.DatabaseMonitor;
+
import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+
@Configuration
@EnableAutoConfiguration
+@ComponentScan({"org.apache.dolphinscheduler.dao.plugin"})
@MapperScan(basePackages = "org.apache.dolphinscheduler.dao.mapper",
sqlSessionFactoryRef = "sqlSessionFactory")
public class DaoConfiguration {
+
+ /**
+ * Inject this field to make sure the database is initialized, this can
solve the table not found issue #8432.
+ */
+ @Autowired(required = false)
+ public DataSourceScriptDatabaseInitializer
dataSourceScriptDatabaseInitializer;
+
+ /**
+ * Inject this field to make sure the DaoPluginConfiguration is
initialized before SpringConnectionFactory.
+ */
+ @Autowired
+ public DaoPluginConfiguration daoPluginConfiguration;
+
+ @Bean
+ public MybatisPlusInterceptor paginationInterceptor(DbType dbType) {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new
PaginationInnerInterceptor(dbType));
+ return interceptor;
+ }
+
+ @Bean
+ public DbType dbType() {
+ return daoPluginConfiguration.dbType();
+ }
+
+ @Bean
+ public DatabaseMonitor databaseMonitor() {
+ return daoPluginConfiguration.databaseMonitor();
+ }
+
+ @Bean
+ public DatabaseDialect databaseDialect() {
+ return daoPluginConfiguration.databaseDialect();
+ }
+
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java
deleted file mode 100644
index c640761350..0000000000
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java
+++ /dev/null
@@ -1,111 +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.
- */
-
-package org.apache.dolphinscheduler.dao.datasource;
-
-import org.apache.dolphinscheduler.dao.plugin.api.DaoPluginConfiguration;
-import org.apache.dolphinscheduler.dao.plugin.api.monitor.DatabaseMonitor;
-
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.apache.ibatis.type.JdbcType;
-
-import javax.sql.DataSource;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-
-import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.core.MybatisConfiguration;
-import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
-
-@Configuration
-public class SpringConnectionFactory {
-
- /**
- * Inject this field to make sure the database is initialized, this can
solve the table not found issue #8432.
- */
- @Autowired(required = false)
- public DataSourceScriptDatabaseInitializer
dataSourceScriptDatabaseInitializer;
-
- /**
- * Inject this field to make sure the DaoPluginConfiguration is
initialized before SpringConnectionFactory.
- */
- @Autowired
- public DaoPluginConfiguration daoPluginConfiguration;
-
- @Bean
- public MybatisPlusInterceptor paginationInterceptor(DbType dbType) {
- MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
- interceptor.addInnerInterceptor(new
PaginationInnerInterceptor(dbType));
- return interceptor;
- }
-
- @Bean
- public DataSourceTransactionManager transactionManager(DataSource
dataSource) {
- return new DataSourceTransactionManager(dataSource);
- }
-
- @Bean
- public SqlSessionFactory sqlSessionFactory(DataSource dataSource,
- GlobalConfig globalConfig,
- DbType dbType) throws Exception
{
- MybatisConfiguration configuration = new MybatisConfiguration();
- configuration.setMapUnderscoreToCamelCase(true);
- configuration.setCacheEnabled(false);
- configuration.setCallSettersOnNulls(true);
- configuration.setJdbcTypeForNull(JdbcType.NULL);
- configuration.addInterceptor(paginationInterceptor(dbType));
-
- MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new
MybatisSqlSessionFactoryBean();
- sqlSessionFactoryBean.setConfiguration(configuration);
- sqlSessionFactoryBean.setDataSource(dataSource);
-
- sqlSessionFactoryBean.setGlobalConfig(globalConfig);
-
sqlSessionFactoryBean.setTypeAliasesPackage("org.apache.dolphinscheduler.dao.entity");
- ResourcePatternResolver resolver = new
PathMatchingResourcePatternResolver();
- // todo: if the different database has different sql, we need to add
the different mapper.
- sqlSessionFactoryBean
-
.setMapperLocations(resolver.getResources("org/apache/dolphinscheduler/dao/mapper/*Mapper.xml"));
- return sqlSessionFactoryBean.getObject();
- }
-
- @Bean
- public GlobalConfig globalConfig() {
- return new GlobalConfig().setDbConfig(new GlobalConfig.DbConfig()
- .setIdType(IdType.AUTO)).setBanner(false);
- }
-
- @Bean
- public DbType dbType() {
- return daoPluginConfiguration.dbType();
- }
-
- @Bean
- public DatabaseMonitor databaseMonitor() {
- return daoPluginConfiguration.databaseMonitor();
- }
-
-}
diff --git
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDaoTest.java
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDaoTest.java
deleted file mode 100644
index 6a1599360b..0000000000
---
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDaoTest.java
+++ /dev/null
@@ -1,60 +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.
- */
-
-package org.apache.dolphinscheduler.dao.upgrade;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.sql.DataSource;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ActiveProfiles;
-
-@ActiveProfiles("h2")
-public class ProcessDefinitionDaoTest {
-
- @Autowired
- private DataSource dataSource;
- final ProcessDefinitionDao processDefinitionDao = new
ProcessDefinitionDao();
-
- @Test
- public void testQueryAllProcessDefinition() {
- // Map<Integer, String> processDefinitionJsonMap =
- //
processDefinitionDao.queryAllProcessDefinition(dataSource.getConnection());
- // assertThat(processDefinitionJsonMap.size(),greaterThanOrEqualTo(0));
- }
-
- @Test
- public void testUpdateProcessDefinitionJson() {
- Map<Integer, String> processDefinitionJsonMap = new HashMap<>();
- processDefinitionJsonMap.put(1, "test");
- //
processDefinitionDao.updateProcessDefinitionJson(dataSource.getConnection(),processDefinitionJsonMap);
- }
-
- @Test
- public void testQueryAllProcessDefinitionException() {
- // processDefinitionDao.queryAllProcessDefinition(null);
- }
-
- @Test
- public void testUpdateProcessDefinitionJsonException() {
- Assertions.assertThrows(Exception.class, () ->
processDefinitionDao.updateProcessDefinitionJson(null, null));
- }
-}
diff --git
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDaoTest.java
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDaoTest.java
deleted file mode 100644
index 0c36d5f136..0000000000
---
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDaoTest.java
+++ /dev/null
@@ -1,50 +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.
- */
-package org.apache.dolphinscheduler.dao.upgrade;
-
-import org.apache.dolphinscheduler.dao.DaoConfiguration;
-
-import javax.sql.DataSource;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-
-@ActiveProfiles("h2")
-@SpringBootTest(classes = DaoConfiguration.class)
-@ExtendWith(MockitoExtension.class)
-@SpringBootApplication(scanBasePackageClasses = DaoConfiguration.class)
-public class WorkerGroupDaoTest {
-
- @Autowired
- protected DataSource dataSource;
-
- @Test
- public void testQueryQueryAllOldWorkerGroupException() throws Exception {
- Assertions.assertThrows(Exception.class, () -> {
- WorkerGroupDao workerGroupDao = new WorkerGroupDao();
- workerGroupDao.queryAllOldWorkerGroup(null);
- });
-
- }
-
-}
diff --git a/dolphinscheduler-dao/src/test/resources/application.yaml
b/dolphinscheduler-dao/src/test/resources/application.yaml
index 03c09d3d84..ffc6b9762d 100644
--- a/dolphinscheduler-dao/src/test/resources/application.yaml
+++ b/dolphinscheduler-dao/src/test/resources/application.yaml
@@ -26,3 +26,16 @@ spring:
url:
jdbc:h2:mem:dolphinscheduler;MODE=MySQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=true;
username: sa
password: ""
+
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
\ No newline at end of file
diff --git a/dolphinscheduler-master/src/main/resources/application.yaml
b/dolphinscheduler-master/src/main/resources/application.yaml
index b98d5f5e65..cbf25079f3 100644
--- a/dolphinscheduler-master/src/main/resources/application.yaml
+++ b/dolphinscheduler-master/src/main/resources/application.yaml
@@ -71,6 +71,21 @@ spring:
org.quartz.jobStore.driverDelegateClass:
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.clusterCheckinInterval: 5000
+# Mybatis-plus configuration, you don't need to change it
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
+
registry:
type: zookeeper
zookeeper:
diff --git
a/dolphinscheduler-standalone-server/src/main/resources/application.yaml
b/dolphinscheduler-standalone-server/src/main/resources/application.yaml
index 9f9e1bb961..dda509733e 100644
--- a/dolphinscheduler-standalone-server/src/main/resources/application.yaml
+++ b/dolphinscheduler-standalone-server/src/main/resources/application.yaml
@@ -76,6 +76,19 @@ spring:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
registry:
type: zookeeper
zookeeper:
diff --git a/dolphinscheduler-tools/pom.xml b/dolphinscheduler-tools/pom.xml
index 42007b7cb8..dbba85d10d 100644
--- a/dolphinscheduler-tools/pom.xml
+++ b/dolphinscheduler-tools/pom.xml
@@ -130,19 +130,16 @@
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
- <scope>test</scope>
</dependency>
</dependencies>
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/DolphinSchedulerManager.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/DolphinSchedulerManager.java
index 04b906beb5..7f0b7b9d7a 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/DolphinSchedulerManager.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/DolphinSchedulerManager.java
@@ -17,57 +17,45 @@
package org.apache.dolphinscheduler.tools.datasource;
-import org.apache.dolphinscheduler.dao.upgrade.SchemaUtils;
-import org.apache.dolphinscheduler.spi.enums.DbType;
-import org.apache.dolphinscheduler.tools.datasource.dao.UpgradeDao;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerUpgrader;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerVersion;
+import org.apache.dolphinscheduler.tools.datasource.upgrader.UpgradeDao;
+import org.apache.dolphinscheduler.tools.datasource.utils.SchemaUtils;
import org.apache.commons.collections4.CollectionUtils;
import java.io.IOException;
-import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
-import javax.sql.DataSource;
-
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class DolphinSchedulerManager {
- private final UpgradeDao upgradeDao;
+ @Autowired
+ private UpgradeDao upgradeDao;
+
+ @Autowired
+ private DatabaseDialect databaseDialect;
private Map<DolphinSchedulerVersion, DolphinSchedulerUpgrader> upgraderMap
= new HashMap<>();
- public DolphinSchedulerManager(DataSource dataSource, List<UpgradeDao>
daos,
- List<DolphinSchedulerUpgrader>
dolphinSchedulerUpgraders) throws Exception {
- final DbType type = getCurrentDbType(dataSource);
- upgradeDao = daos.stream()
- .filter(it -> it.getDbType() == type)
- .findFirst()
- .orElseThrow(() -> new RuntimeException(
- "Cannot find UpgradeDao implementation for db type: "
+ type));
+ public DolphinSchedulerManager(List<DolphinSchedulerUpgrader>
dolphinSchedulerUpgraders) throws Exception {
if (CollectionUtils.isNotEmpty(dolphinSchedulerUpgraders)) {
upgraderMap = dolphinSchedulerUpgraders.stream()
.collect(Collectors.toMap(DolphinSchedulerUpgrader::getCurrentVersion,
Function.identity()));
}
}
- private DbType getCurrentDbType(DataSource dataSource) throws Exception {
- try (Connection conn = dataSource.getConnection()) {
- String name =
conn.getMetaData().getDatabaseProductName().toUpperCase();
- return DbType.valueOf(name);
- }
- }
-
public void initDolphinScheduler() {
this.initDolphinSchedulerSchema();
}
@@ -78,9 +66,9 @@ public class DolphinSchedulerManager {
*/
public boolean schemaIsInitialized() {
// Determines whether the dolphinscheduler table structure has been
init
- if (upgradeDao.isExistsTable("t_escheduler_version")
- || upgradeDao.isExistsTable("t_ds_version")
- || upgradeDao.isExistsTable("t_escheduler_queue")) {
+ if (databaseDialect.tableExists("t_escheduler_version")
+ || databaseDialect.tableExists("t_ds_version")
+ || databaseDialect.tableExists("t_escheduler_queue")) {
log.info("The database has been initialized. Skip the
initialization step");
return true;
}
@@ -100,13 +88,13 @@ public class DolphinSchedulerManager {
} else {
String version;
// Gets the version of the current system
- if (upgradeDao.isExistsTable("t_escheduler_version")) {
+ if (databaseDialect.tableExists("t_escheduler_version")) {
version = upgradeDao.getCurrentVersion("t_escheduler_version");
- } else if (upgradeDao.isExistsTable("t_ds_version")) {
+ } else if (databaseDialect.tableExists("t_ds_version")) {
version = upgradeDao.getCurrentVersion("t_ds_version");
- } else if (upgradeDao.isExistsColumn("t_escheduler_queue",
"create_time")) {
+ } else if (databaseDialect.columnExists("t_escheduler_queue",
"create_time")) {
version = "1.0.1";
- } else if (upgradeDao.isExistsTable("t_escheduler_queue")) {
+ } else if (databaseDialect.tableExists("t_escheduler_queue")) {
version = "1.0.0";
} else {
log.error("Unable to determine current software version, so
cannot upgrade");
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/InitDolphinScheduler.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/InitDolphinScheduler.java
deleted file mode 100644
index c6aa05190d..0000000000
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/InitDolphinScheduler.java
+++ /dev/null
@@ -1,56 +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.
- */
-
-package org.apache.dolphinscheduler.tools.datasource;
-
-import org.apache.dolphinscheduler.dao.DaoConfiguration;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Component;
-
-@ImportAutoConfiguration(DaoConfiguration.class)
-@SpringBootApplication
-public class InitDolphinScheduler {
-
- public static void main(String[] args) {
- SpringApplication.run(InitDolphinScheduler.class, args);
- }
-
- @Component
- @Profile("init")
- @Slf4j
- static class InitRunner implements CommandLineRunner {
-
- private final DolphinSchedulerManager dolphinSchedulerManager;
-
- InitRunner(DolphinSchedulerManager dolphinSchedulerManager) {
- this.dolphinSchedulerManager = dolphinSchedulerManager;
- }
-
- @Override
- public void run(String... args) {
- dolphinSchedulerManager.initDolphinScheduler();
- log.info("init DolphinScheduler finished");
- }
- }
-}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/JsonSplitDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/JsonSplitDao.java
similarity index 99%
rename from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/JsonSplitDao.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/JsonSplitDao.java
index d453651782..2a411df994 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/JsonSplitDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/JsonSplitDao.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.dao;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinitionLog;
import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelationLog;
@@ -28,6 +28,7 @@ import java.util.List;
import lombok.extern.slf4j.Slf4j;
+@Deprecated
@Slf4j
public class JsonSplitDao {
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/MySQLUpgradeDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/MySQLUpgradeDao.java
deleted file mode 100644
index ba7e5d28e9..0000000000
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/MySQLUpgradeDao.java
+++ /dev/null
@@ -1,90 +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.
- */
-
-package org.apache.dolphinscheduler.tools.datasource.dao;
-
-import org.apache.dolphinscheduler.spi.enums.DbType;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.sql.DataSource;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Service;
-
-@Service
-@Slf4j
-@Profile("mysql")
-public class MySQLUpgradeDao extends UpgradeDao {
-
- private MySQLUpgradeDao(DataSource dataSource) {
- super(dataSource);
- }
-
- @Override
- protected String initSqlPath() {
- return "create/release-1.0.0_schema/mysql";
- }
-
- @Override
- public DbType getDbType() {
- return DbType.MYSQL;
- }
-
- /**
- * determines whether a table exists
- * @param tableName tableName
- * @return if table exist return true,else return false
- */
- @Override
- public boolean isExistsTable(String tableName) {
- try (
- Connection conn = dataSource.getConnection();
- ResultSet rs = conn.getMetaData().getTables(conn.getCatalog(),
conn.getSchema(), tableName, null)) {
- return rs.next();
- } catch (SQLException e) {
- log.error(e.getMessage(), e);
- throw new RuntimeException(e.getMessage(), e);
- }
-
- }
-
- /**
- * determines whether a field exists in the specified table
- * @param tableName tableName
- * @param columnName columnName
- * @return if column name exist return true,else return false
- */
- @Override
- public boolean isExistsColumn(String tableName, String columnName) {
- try (
- Connection conn = dataSource.getConnection();
- ResultSet rs =
- conn.getMetaData().getColumns(conn.getCatalog(),
conn.getSchema(), tableName, columnName)) {
- return rs.next();
-
- } catch (SQLException e) {
- log.error(e.getMessage(), e);
- throw new RuntimeException(e.getMessage(), e);
- }
- }
-
-}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ProcessDefinitionDao.java
similarity index 98%
rename from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDao.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ProcessDefinitionDao.java
index 2c66b67414..338a9d591d 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProcessDefinitionDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ProcessDefinitionDao.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.dao;
import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.Flag;
@@ -33,6 +33,7 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
+@Deprecated
@Slf4j
public class ProcessDefinitionDao {
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProjectDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ProjectDao.java
similarity index 97%
rename from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProjectDao.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ProjectDao.java
index 3b267f8b5f..65466fe99a 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ProjectDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ProjectDao.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.dao;
import org.apache.dolphinscheduler.common.utils.CodeGenerateUtils;
@@ -27,6 +27,7 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
+@Deprecated
@Slf4j
public class ProjectDao {
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ResourceDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ResourceDao.java
index b6ace04f17..4a9880f66a 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ResourceDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ResourceDao.java
@@ -34,6 +34,7 @@ import com.google.common.base.Strings;
/**
* resource dao
*/
+@Deprecated
@Slf4j
public class ResourceDao {
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ScheduleDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ScheduleDao.java
similarity index 98%
rename from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ScheduleDao.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ScheduleDao.java
index b79e40b0ce..e3f6772ea2 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/ScheduleDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/ScheduleDao.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -26,6 +26,7 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
+@Deprecated
@Slf4j
public class ScheduleDao {
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/WorkerGroupDao.java
similarity index 96%
rename from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDao.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/WorkerGroupDao.java
index 44b5d85ad2..4b4b2394c5 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/WorkerGroupDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/WorkerGroupDao.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -25,6 +25,7 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
+@Deprecated
@Slf4j
public class WorkerGroupDao {
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/UpgradeDao.java
similarity index 88%
rename from
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/UpgradeDao.java
index 0154718780..89704bc736 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/UpgradeDao.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.tools.datasource.dao;
+package org.apache.dolphinscheduler.tools.datasource.upgrader;
import org.apache.dolphinscheduler.common.sql.SqlScriptRunner;
-import org.apache.dolphinscheduler.dao.upgrade.SchemaUtils;
-import org.apache.dolphinscheduler.spi.enums.DbType;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
+import org.apache.dolphinscheduler.tools.datasource.dao.ResourceDao;
+import org.apache.dolphinscheduler.tools.datasource.utils.SchemaUtils;
import java.io.FileNotFoundException;
import java.sql.Connection;
@@ -31,34 +32,33 @@ import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+
@Slf4j
-public abstract class UpgradeDao {
+@Service
+public class UpgradeDao {
private static final String T_VERSION_NAME = "t_escheduler_version";
private static final String T_NEW_VERSION_NAME = "t_ds_version";
- protected final DataSource dataSource;
-
- protected UpgradeDao(DataSource dataSource) {
- this.dataSource = dataSource;
- }
+ @Autowired
+ private DataSource dataSource;
- protected abstract String initSqlPath();
+ @Autowired
+ private DbType dbType;
- public abstract DbType getDbType();
-
- public void initSchema() {
- // Execute the dolphinscheduler full sql
- runInitSql(getDbType());
- }
+ @Autowired
+ private DatabaseDialect databaseDialect;
/**
* run init sql to init db schema
- *
- * @param dbType db type
*/
- private void runInitSql(DbType dbType) {
- String sqlFilePath = String.format("sql/dolphinscheduler_%s.sql",
dbType.getDescp());
+ public void initSchema() {
+ // Execute the dolphinscheduler full sql
+ String sqlFilePath = String.format("sql/dolphinscheduler_%s.sql",
dbType.getDb());
SqlScriptRunner sqlScriptRunner = new SqlScriptRunner(dataSource,
sqlFilePath);
try {
sqlScriptRunner.execute();
@@ -68,10 +68,6 @@ public abstract class UpgradeDao {
}
}
- public abstract boolean isExistsTable(String tableName);
-
- public abstract boolean isExistsColumn(String tableName, String
columnName);
-
public String getCurrentVersion(String versionName) {
String sql = String.format("select version from %s", versionName);
String version = null;
@@ -112,17 +108,17 @@ public abstract class UpgradeDao {
private void upgradeDolphinSchedulerDML(String schemaDir, String
scriptFile) {
String schemaVersion = schemaDir.split("_")[0];
String sqlFilePath =
- String.format("sql/upgrade/%s/%s/%s", schemaDir,
getDbType().name().toLowerCase(), scriptFile);
+ String.format("sql/upgrade/%s/%s/%s", schemaDir,
dbType.getDb(), scriptFile);
try {
// Execute the upgraded dolphinscheduler dml
SqlScriptRunner sqlScriptRunner = new SqlScriptRunner(dataSource,
sqlFilePath);
sqlScriptRunner.execute();
try (Connection connection = dataSource.getConnection()) {
String upgradeSQL;
- if (isExistsTable(T_VERSION_NAME)) {
+ if (databaseDialect.tableExists(T_VERSION_NAME)) {
// Change version in the version table to the new version
upgradeSQL = String.format("update %s set version = ?",
T_VERSION_NAME);
- } else if (isExistsTable(T_NEW_VERSION_NAME)) {
+ } else if (databaseDialect.tableExists(T_NEW_VERSION_NAME)) {
// Change version in the version table to the new version
upgradeSQL = String.format("update %s set version = ?",
T_NEW_VERSION_NAME);
} else {
@@ -151,7 +147,7 @@ public abstract class UpgradeDao {
*/
public void upgradeDolphinSchedulerDDL(String schemaDir, String
scriptFile) {
String sqlFilePath =
- String.format("sql/upgrade/%s/%s/%s", schemaDir,
getDbType().name().toLowerCase(), scriptFile);
+ String.format("sql/upgrade/%s/%s/%s", schemaDir,
dbType.getDb(), scriptFile);
SqlScriptRunner sqlScriptRunner = new SqlScriptRunner(dataSource,
sqlFilePath);
try {
// Execute the dolphinscheduler ddl.sql for the upgrade
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v130/V130DolphinSchedulerUpgrader.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v130/V130DolphinSchedulerUpgrader.java
index 27871277bf..37b1cc0a33 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v130/V130DolphinSchedulerUpgrader.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v130/V130DolphinSchedulerUpgrader.java
@@ -18,8 +18,8 @@
package org.apache.dolphinscheduler.tools.datasource.upgrader.v130;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
-import org.apache.dolphinscheduler.dao.upgrade.ProcessDefinitionDao;
-import org.apache.dolphinscheduler.dao.upgrade.WorkerGroupDao;
+import org.apache.dolphinscheduler.tools.datasource.dao.ProcessDefinitionDao;
+import org.apache.dolphinscheduler.tools.datasource.dao.WorkerGroupDao;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerUpgrader;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerVersion;
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v132/V132DolphinSchedulerUpgrader.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v132/V132DolphinSchedulerUpgrader.java
index abb7045e34..5164194121 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v132/V132DolphinSchedulerUpgrader.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v132/V132DolphinSchedulerUpgrader.java
@@ -18,8 +18,8 @@
package org.apache.dolphinscheduler.tools.datasource.upgrader.v132;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
-import org.apache.dolphinscheduler.dao.upgrade.ProcessDefinitionDao;
import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo;
+import org.apache.dolphinscheduler.tools.datasource.dao.ProcessDefinitionDao;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerUpgrader;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerVersion;
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v200/V200DolphinSchedulerUpgrader.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v200/V200DolphinSchedulerUpgrader.java
index f14ed15d22..35a9be75dc 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v200/V200DolphinSchedulerUpgrader.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v200/V200DolphinSchedulerUpgrader.java
@@ -32,15 +32,15 @@ import
org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinitionLog;
import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelationLog;
import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
-import org.apache.dolphinscheduler.dao.upgrade.JsonSplitDao;
-import org.apache.dolphinscheduler.dao.upgrade.ProcessDefinitionDao;
-import org.apache.dolphinscheduler.dao.upgrade.ProjectDao;
-import org.apache.dolphinscheduler.dao.upgrade.ScheduleDao;
import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo;
import
org.apache.dolphinscheduler.plugin.task.api.parameters.TaskTimeoutParameter;
-import org.apache.dolphinscheduler.tools.datasource.dao.UpgradeDao;
+import org.apache.dolphinscheduler.tools.datasource.dao.JsonSplitDao;
+import org.apache.dolphinscheduler.tools.datasource.dao.ProcessDefinitionDao;
+import org.apache.dolphinscheduler.tools.datasource.dao.ProjectDao;
+import org.apache.dolphinscheduler.tools.datasource.dao.ScheduleDao;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerUpgrader;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerVersion;
+import org.apache.dolphinscheduler.tools.datasource.upgrader.UpgradeDao;
import org.apache.commons.collections4.CollectionUtils;
diff --git
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v320/V320DolphinSchedulerUpgrader.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v320/V320DolphinSchedulerUpgrader.java
index 61405b7ffc..5c8378a70e 100644
---
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v320/V320DolphinSchedulerUpgrader.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/upgrader/v320/V320DolphinSchedulerUpgrader.java
@@ -18,59 +18,41 @@
package org.apache.dolphinscheduler.tools.datasource.upgrader.v320;
import org.apache.dolphinscheduler.common.constants.Constants;
-import org.apache.dolphinscheduler.dao.entity.ProcessDefinitionLog;
-import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
-import org.apache.dolphinscheduler.dao.entity.Schedule;
-import org.apache.dolphinscheduler.dao.entity.TaskInstance;
-import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionLogMapper;
-import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
-import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
-import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
-import org.apache.dolphinscheduler.dao.mapper.UserMapper;
-import org.apache.dolphinscheduler.tools.datasource.dao.UpgradeDao;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerUpgrader;
import
org.apache.dolphinscheduler.tools.datasource.upgrader.DolphinSchedulerVersion;
+import org.apache.dolphinscheduler.tools.datasource.upgrader.UpgradeDao;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.collections4.MapUtils;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
+import javax.sql.DataSource;
+
+import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-
@Slf4j
@Component
public class V320DolphinSchedulerUpgrader implements DolphinSchedulerUpgrader {
@Autowired
- private ProcessInstanceMapper processInstanceMapper;
-
- @Autowired
- private ProcessDefinitionLogMapper processDefinitionLogMapper;
+ private DataSource dataSource;
- @Autowired
- private ScheduleMapper scheduleMapper;
-
- @Autowired
- private UserMapper userMapper;
-
- @Autowired
- private TaskInstanceMapper taskInstanceMapper;
-
- @Lazy()
@Autowired
private UpgradeDao upgradeDao;
+ @SneakyThrows
@Override
public void doUpgrade() {
upgradeWorkflowInstance();
@@ -80,68 +62,219 @@ public class V320DolphinSchedulerUpgrader implements
DolphinSchedulerUpgrader {
}
private void upgradeWorkflowInstance() {
- Map<Integer, String> userMap = userMapper.selectList(new
QueryWrapper<>())
- .stream()
- .collect(Collectors.toMap(User::getId, User::getUserName));
-
+ Map<Integer, String> userMap = getUserMap();
while (true) {
- LambdaQueryWrapper<ProcessInstance> wrapper = new
QueryWrapper<ProcessInstance>()
- .lambda()
- .eq(ProcessInstance::getProjectCode, null)
- .last("limit 1000");
- List<ProcessInstance> needUpdateWorkflowInstance =
processInstanceMapper.selectList(wrapper);
- if (CollectionUtils.isEmpty(needUpdateWorkflowInstance)) {
+ List<Map<String, Object>> needUpdateWorkflowInstances =
getProcessInstanceWhichProjectCodeIsNull();
+ if (CollectionUtils.isEmpty(needUpdateWorkflowInstances)) {
return;
}
- needUpdateWorkflowInstance.parallelStream()
+ needUpdateWorkflowInstances.parallelStream()
.forEach(processInstance -> {
- ProcessDefinitionLog processDefinitionLog =
-
processDefinitionLogMapper.queryByDefinitionCodeAndVersion(
-
processInstance.getProcessDefinitionCode(),
-
processInstance.getProcessDefinitionVersion());
- Schedule schedule =
-
scheduleMapper.queryByProcessDefinitionCode(processInstance.getProcessDefinitionCode());
- if (processDefinitionLog != null) {
-
processInstance.setProjectCode(processDefinitionLog.getProjectCode());
- processInstance.setTenantCode(
-
StringUtils.defaultIfEmpty(schedule.getTenantCode(), Constants.DEFAULT));
-
processInstance.setExecutorName(userMap.get(processInstance.getExecutorId()));
- } else {
- processInstance.setProjectCode(-1L);
+ Integer id = (Integer) processInstance.get("id");
+ Long processDefinitionCode = (Long)
processInstance.get("process_definition_code");
+ Integer processDefinitionVersion = (Integer)
processInstance.get("process_definition_version");
+
+ Map<String, Object> processDefinitionLog =
+
getProcessDefinitionLogByCode(processDefinitionCode, processDefinitionVersion);
+
+ Long projectCode = -1L;
+ String tenantCode = null;
+ String executorName = null;
+ if (MapUtils.isNotEmpty(processDefinitionLog)) {
+ Map<String, Object> scheduler =
getSchedulerByProcessDefinitionCode(processDefinitionCode);
+ projectCode =
processDefinitionLog.get("project_code") == null ? -1L
+ : (Long)
processDefinitionLog.get("project_code");
+ tenantCode = scheduler.get("tenant_code") == null
? Constants.DEFAULT
+ : (String) scheduler.get("tenant_code");
+ executorName = userMap.get((Integer)
processInstance.get("executor_id"));
}
- processInstanceMapper.updateById(processInstance);
+ updateProjectCodeInProcessInstance(id, projectCode,
tenantCode, executorName);
});
- log.info("Success upgrade workflow instance, current batch size:
{}", needUpdateWorkflowInstance.size());
+ log.info("Success upgrade workflow instance, current batch size:
{}", needUpdateWorkflowInstances.size());
}
}
private void upgradeTaskInstance() {
while (true) {
- LambdaQueryWrapper<TaskInstance> wrapper = new
QueryWrapper<TaskInstance>()
- .lambda()
- .eq(TaskInstance::getProjectCode, null)
- .last("limit 1000");
- List<TaskInstance> taskInstances =
taskInstanceMapper.selectList(wrapper);
+ List<Map<String, Object>> taskInstances =
getTaskInstanceWhichProjectCodeIsNull();
if (CollectionUtils.isEmpty(taskInstances)) {
return;
}
+
taskInstances.parallelStream()
.forEach(taskInstance -> {
- ProcessInstance processInstance =
-
processInstanceMapper.selectById(taskInstance.getProcessInstanceId());
- if (processInstance == null) {
- taskInstance.setProjectCode(-1L);
- } else {
-
taskInstance.setProjectCode(processInstance.getProjectCode());
-
taskInstance.setProcessInstanceName(processInstance.getName());
-
taskInstance.setExecutorName(processInstance.getExecutorName());
+ Integer id = (Integer) taskInstance.get("id");
+ Integer processInstanceId = (Integer)
taskInstance.get("process_instance_id");
+ Map<String, Object> processInstance =
getProcessInstanceById(processInstanceId);
+
+ Long projectCode = -1L;
+ String processInstanceName = null;
+ String executorName = null;
+
+ if (MapUtils.isNotEmpty(processInstance)) {
+ projectCode = processInstance.get("project_code")
== null ? -1L
+ : (Long)
processInstance.get("project_code");
+ processInstanceName = (String)
processInstance.get("name");
+ executorName = (String)
processInstance.get("executor_name");
}
- taskInstanceMapper.updateById(taskInstance);
+ updateProjectCodeInTaskInstance(id, projectCode,
processInstanceName, executorName);
});
log.info("Success upgrade task instance, current batch size: {}",
taskInstances.size());
}
}
+ private List<Map<String, Object>> getTaskInstanceWhichProjectCodeIsNull() {
+ List<Map<String, Object>> processInstanceList = new ArrayList<>();
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(
+ "select id, process_instance_id from
t_ds_task_instance where project_code is null limit 1000");
+ ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ Map<String, Object> row = new HashMap<>();
+ row.put("id", resultSet.getInt("id"));
+ row.put("process_instance_id",
resultSet.getInt("process_instance_id"));
+ processInstanceList.add(row);
+ }
+ return processInstanceList;
+ } catch (Exception ex) {
+ throw new RuntimeException("Query t_ds_process_instance error",
ex);
+ }
+
+ }
+
+ private Map<Integer, String> getUserMap() {
+ Map<Integer, String> userMap = new HashMap<>();
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
+ connection.prepareStatement("select id, user_name from
t_ds_user");
+ ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ userMap.put(resultSet.getInt("id"),
resultSet.getString("user_name"));
+ }
+ } catch (Exception ex) {
+ throw new RuntimeException("Query t_ds_user error", ex);
+ }
+ return userMap;
+ }
+
+ private List<Map<String, Object>>
getProcessInstanceWhichProjectCodeIsNull() {
+ List<Map<String, Object>> processInstanceList = new ArrayList<>();
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(
+ "select id, process_definition_code,
process_definition_version, executor_id from t_ds_process_instance where
project_code is null limit 1000");
+ ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ Map<String, Object> row = new HashMap<>();
+ row.put("id", resultSet.getInt("id"));
+ row.put("process_definition_code",
resultSet.getLong("process_definition_code"));
+ row.put("process_definition_version",
resultSet.getInt("process_definition_version"));
+ row.put("executor_id", resultSet.getInt("executor_id"));
+ processInstanceList.add(row);
+ }
+ return processInstanceList;
+ } catch (Exception ex) {
+ throw new RuntimeException("Query t_ds_process_instance error",
ex);
+ }
+ }
+
+ private Map<String, Object> getProcessInstanceById(Integer
processInstanceId) {
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(
+ "select project_code, name, executor_name from
t_ds_process_instance where id = ?");) {
+ preparedStatement.setInt(1, processInstanceId);
+ try (ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ Map<String, Object> row = new HashMap<>();
+ row.put("project_code", resultSet.getLong("project_code"));
+ row.put("name", resultSet.getString("name"));
+ row.put("executor_name",
resultSet.getString("executor_name"));
+ return row;
+ }
+ }
+ return Collections.emptyMap();
+ } catch (Exception ex) {
+ throw new RuntimeException("Query t_ds_process_instance error",
ex);
+ }
+ }
+
+ private Map<String, Object> getProcessDefinitionLogByCode(Long
processDefinitionCode,
+ Integer
processDefinitionVersion) {
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(
+ "select project_code from t_ds_process_definition_log
where code = ? and version = ?")) {
+ preparedStatement.setLong(1, processDefinitionCode);
+ preparedStatement.setInt(2, processDefinitionVersion);
+
+ try (ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ Map<String, Object> row = new HashMap<>();
+ row.put("project_code", resultSet.getLong("project_code"));
+ return row;
+ }
+ }
+ return Collections.emptyMap();
+ } catch (Exception ex) {
+ throw new RuntimeException("Query t_ds_process_definition_log
error", ex);
+ }
+ }
+
+ private Map<String, Object> getSchedulerByProcessDefinitionCode(Long
processDefinitionCode) {
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement = connection
+ .prepareStatement("select * from t_ds_schedules where
process_definition_code = ?")) {
+ preparedStatement.setLong(1, processDefinitionCode);
+
+ try (ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ Map<String, Object> row = new HashMap<>();
+ row.put("tenant_code", resultSet.getString("tenant_code"));
+ return row;
+ }
+ }
+ return Collections.emptyMap();
+ } catch (Exception ex) {
+ throw new RuntimeException("Query t_ds_schedules error", ex);
+ }
+ }
+
+ private void updateProjectCodeInProcessInstance(Integer processInstanceId,
Long projectCode, String tenantCode,
+ String executorName) {
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(
+ "update t_ds_process_instance set project_code = ?,
tenant_code = ?, executor_name = ? where id = ?")) {
+ preparedStatement.setLong(1, projectCode);
+ preparedStatement.setString(2, tenantCode);
+ preparedStatement.setString(3, executorName);
+ preparedStatement.setInt(4, processInstanceId);
+ preparedStatement.executeUpdate();
+ } catch (Exception ex) {
+ throw new RuntimeException("Update t_ds_process_instance error",
ex);
+ }
+ }
+
+ private void updateProjectCodeInTaskInstance(Integer id, Long projectCode,
String processInstanceName,
+ String executorName) {
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(
+ "update t_ds_task_instance set project_code = ?,
process_instance_name = ?, executor_name = ? where id = ?")) {
+ preparedStatement.setLong(1, projectCode);
+ preparedStatement.setString(2, processInstanceName);
+ preparedStatement.setString(3, executorName);
+ preparedStatement.setInt(4, id);
+ preparedStatement.executeUpdate();
+ } catch (Exception ex) {
+ throw new RuntimeException("Update t_ds_process_instance error",
ex);
+ }
+ }
+
@Override
public DolphinSchedulerVersion getCurrentVersion() {
return DolphinSchedulerVersion.V3_2_0;
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/utils/SchemaUtils.java
similarity index 98%
rename from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java
rename to
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/utils/SchemaUtils.java
index 25164a6059..bafe9e2017 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java
+++
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/utils/SchemaUtils.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.utils;
import org.apache.dolphinscheduler.common.utils.FileUtils;
diff --git a/dolphinscheduler-tools/src/main/resources/application.yaml
b/dolphinscheduler-tools/src/main/resources/application.yaml
index a6688770b4..38752021dc 100644
--- a/dolphinscheduler-tools/src/main/resources/application.yaml
+++ b/dolphinscheduler-tools/src/main/resources/application.yaml
@@ -34,6 +34,20 @@ spring:
leak-detection-threshold: 0
initialization-fail-timeout: 1
+# Mybatis-plus configuration, you don't need to change it
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
demo:
tenant-code: default
domain-name: localhost
diff --git
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtilsTest.java
b/dolphinscheduler-tools/src/test/java/org/apache/dolphinscheduler/tools/datasource/utils/SchemaUtilsTest.java
similarity index 66%
rename from
dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtilsTest.java
rename to
dolphinscheduler-tools/src/test/java/org/apache/dolphinscheduler/tools/datasource/utils/SchemaUtilsTest.java
index b157203def..151c813438 100644
---
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtilsTest.java
+++
b/dolphinscheduler-tools/src/test/java/org/apache/dolphinscheduler/tools/datasource/utils/SchemaUtilsTest.java
@@ -1,21 +1,24 @@
/*
- * 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
+ * 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
+ * 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.
*
- * 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.
*/
-package org.apache.dolphinscheduler.dao.upgrade;
+package org.apache.dolphinscheduler.tools.datasource.utils;
import org.apache.commons.collections4.CollectionUtils;
@@ -25,10 +28,10 @@ import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-public class SchemaUtilsTest {
+class SchemaUtilsTest {
@Test
- public void testIsAGreatVersion() {
+ void testIsAGreatVersion() {
// param is null
try {
SchemaUtils.isAGreatVersion(null, null);
@@ -64,7 +67,7 @@ public class SchemaUtilsTest {
}
@Test
- public void testGetAllSchemaList() {
+ void testGetAllSchemaList() {
List<String> list = null;
try {
list = SchemaUtils.getAllSchemaList();
@@ -73,4 +76,5 @@ public class SchemaUtilsTest {
}
Assertions.assertFalse(CollectionUtils.isEmpty(list), "Can not find
any schema files");
}
+
}
diff --git a/dolphinscheduler-tools/src/test/resources/application-mysql.yaml
b/dolphinscheduler-tools/src/test/resources/application-mysql.yaml
index 48cdd2b2c5..0b553c2bda 100644
--- a/dolphinscheduler-tools/src/test/resources/application-mysql.yaml
+++ b/dolphinscheduler-tools/src/test/resources/application-mysql.yaml
@@ -34,6 +34,19 @@ spring:
leak-detection-threshold: 0
initialization-fail-timeout: 1
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
demo:
tenant-code: default
domain-name: localhost
diff --git
a/dolphinscheduler-tools/src/test/resources/application-postgresql.yaml
b/dolphinscheduler-tools/src/test/resources/application-postgresql.yaml
index 46043a7e76..21daaa0606 100644
--- a/dolphinscheduler-tools/src/test/resources/application-postgresql.yaml
+++ b/dolphinscheduler-tools/src/test/resources/application-postgresql.yaml
@@ -34,6 +34,19 @@ spring:
leak-detection-threshold: 0
initialization-fail-timeout: 1
+mybatis-plus:
+ mapper-locations:
classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml
+ type-aliases-package: org.apache.dolphinscheduler.dao.entity
+ configuration:
+ cache-enabled: false
+ call-setters-on-nulls: true
+ map-underscore-to-camel-case: true
+ jdbc-type-for-null: NULL
+ global-config:
+ db-config:
+ id-type: auto
+ banner: false
+
demo:
tenant-code: default
domain-name: localhost
diff --git a/dolphinscheduler-tools/src/test/resources/logback.xml
b/dolphinscheduler-tools/src/test/resources/logback.xml
index 6c17361120..d820a8d013 100644
--- a/dolphinscheduler-tools/src/test/resources/logback.xml
+++ b/dolphinscheduler-tools/src/test/resources/logback.xml
@@ -22,7 +22,7 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
- [%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{96}:[%line]
-
[WorkflowInstance-%X{workflowInstanceId:-0}][TaskInstance-%X{taskInstanceId:-0}]
- %msg%n
+ [%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{96}:[%line]
- %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
diff --git
a/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
new file mode 100644
index 0000000000..4a14f326b9
--- /dev/null
+++
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
@@ -0,0 +1,16 @@
+/*
+ * 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.
+*/
diff --git
a/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl_post.sql
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl_post.sql
new file mode 100644
index 0000000000..4a14f326b9
--- /dev/null
+++
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl_post.sql
@@ -0,0 +1,16 @@
+/*
+ * 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.
+*/
diff --git
a/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_dml.sql
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_dml.sql
new file mode 100644
index 0000000000..4a14f326b9
--- /dev/null
+++
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_dml.sql
@@ -0,0 +1,16 @@
+/*
+ * 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.
+*/
diff --git
a/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
new file mode 100644
index 0000000000..4a14f326b9
--- /dev/null
+++
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
@@ -0,0 +1,16 @@
+/*
+ * 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.
+*/
diff --git
a/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl_post.sql
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl_post.sql
new file mode 100644
index 0000000000..4a14f326b9
--- /dev/null
+++
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl_post.sql
@@ -0,0 +1,16 @@
+/*
+ * 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.
+*/
diff --git
a/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_dml.sql
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_dml.sql
new file mode 100644
index 0000000000..4a14f326b9
--- /dev/null
+++
b/dolphinscheduler-tools/src/test/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_dml.sql
@@ -0,0 +1,16 @@
+/*
+ * 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.
+*/