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 163f8f01f0 Fix jdbc registry cannot work (#15861)
163f8f01f0 is described below

commit 163f8f01f0b3726374c81d9fa87da6571b3c460c
Author: Wenjun Ruan <[email protected]>
AuthorDate: Thu Apr 18 15:43:28 2024 +0800

    Fix jdbc registry cannot work (#15861)
---
 .github/workflows/backend.yml                      |  12 +-
 .../Dockerfile                                     |   6 +-
 .../{mysql => mysql_with_mysql_registry}/deploy.sh |   1 +
 .../docker-compose-base.yaml}                      |  19 ++-
 .../docker-compose-cluster.yaml                    |   0
 .../dolphinscheduler_env.sh                        |   7 +-
 .../install_env.sh                                 |   3 -
 .../running_test.sh                                |   0
 .../start-job.sh                                   |   8 +-
 .../Dockerfile                                     |   6 +-
 .../deploy.sh                                      |   0
 .../docker-compose-base.yaml                       |   0
 .../docker-compose-cluster.yaml                    |   0
 .../dolphinscheduler_env.sh                        |   0
 .../install_env.sh                                 |   0
 .../running_test.sh                                |   0
 .../start-job.sh                                   |   8 +-
 .../Dockerfile                                     |   6 +-
 .../deploy.sh                                      |   1 +
 .../docker-compose-base.yaml}                      |  20 ++-
 .../docker-compose-cluster.yaml                    |   0
 .../dolphinscheduler_env.sh                        |   7 +-
 .../install_env.sh                                 |   3 -
 .../running_test.sh                                |   0
 .../start-job.sh                                   |   8 +-
 .../Dockerfile                                     |   6 +-
 .../deploy.sh                                      |   0
 .../docker-compose-base.yaml                       |   0
 .../docker-compose-cluster.yaml                    |   0
 .../dolphinscheduler_env.sh                        |   0
 .../install_env.sh                                 |   0
 .../running_test.sh                                |   0
 .../start-job.sh                                   |   8 +-
 .../apache/dolphinscheduler/alert/AlertServer.java |  19 +--
 .../dolphinscheduler/api/ApiApplicationServer.java |   6 +-
 .../org/apache/dolphinscheduler/dao/PluginDao.java |   4 +-
 .../dao/{ => repository/impl}/AlertDaoTest.java    |   4 +-
 .../server/master/MasterServer.java                |   6 +-
 .../dolphinscheduler-registry-jdbc/README.md       |  10 +-
 .../dolphinscheduler-registry-jdbc/pom.xml         |  10 ++
 ...ion.java => JdbcRegistryAutoConfiguration.java} |  30 +++-
 .../src/main/resources/META-INF/spring.factories   |  48 +++----
 .../src/main/resources/mysql_registry_init.sql     |   1 -
 .../src/main/bin/initialize-jdbc-registry.sh       |  22 ++-
 .../tools/command/CommandApplication.java          | 152 +++++++++++++++++++++
 .../src/main/resources/application.yaml            |   2 +
 .../server/worker/WorkerServer.java                |   6 +-
 47 files changed, 325 insertions(+), 124 deletions(-)

diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml
index ea09a17fd2..671223d286 100644
--- a/.github/workflows/backend.yml
+++ b/.github/workflows/backend.yml
@@ -106,10 +106,14 @@ jobs:
     strategy:
       matrix:
         case:
-          - name: cluster-test-mysql
-            script: .github/workflows/cluster-test/mysql/start-job.sh
-          - name: cluster-test-postgresql
-            script: .github/workflows/cluster-test/postgresql/start-job.sh
+          - name: cluster-test-mysql-with-zookeeper-registry
+            script: 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/start-job.sh
+          - name: cluster-test-mysql-with-mysql-registry
+            script: 
.github/workflows/cluster-test/mysql_with_mysql_registry/start-job.sh
+          - name: cluster-test-postgresql-zookeeper-registry
+            script: 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/start-job.sh
+          - name: cluster-test-postgresql-with-postgresql-registry
+            script: 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/start-job.sh
     steps:
       - uses: actions/checkout@v2
         with:
diff --git a/.github/workflows/cluster-test/mysql/Dockerfile 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/Dockerfile
similarity index 85%
copy from .github/workflows/cluster-test/mysql/Dockerfile
copy to .github/workflows/cluster-test/mysql_with_mysql_registry/Dockerfile
index c7d6abe889..12c7db3c18 100644
--- a/.github/workflows/cluster-test/mysql/Dockerfile
+++ b/.github/workflows/cluster-test/mysql_with_mysql_registry/Dockerfile
@@ -28,10 +28,10 @@ RUN mv /root/apache-dolphinscheduler-*-SNAPSHOT-bin 
/root/apache-dolphinschedule
 ENV DOLPHINSCHEDULER_HOME /root/apache-dolphinscheduler-test-SNAPSHOT-bin
 
 #Setting install.sh
-COPY .github/workflows/cluster-test/mysql/install_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
+COPY .github/workflows/cluster-test/mysql_with_mysql_registry/install_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
 
 #Setting dolphinscheduler_env.sh
-COPY .github/workflows/cluster-test/mysql/dolphinscheduler_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
+COPY 
.github/workflows/cluster-test/mysql_with_mysql_registry/dolphinscheduler_env.sh
 $DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
 
 #Download mysql jar
 ENV MYSQL_URL 
"https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar";
@@ -43,6 +43,6 @@ cp $DOLPHINSCHEDULER_HOME/alert-server/libs/$MYSQL_DRIVER 
$DOLPHINSCHEDULER_HOME
 cp $DOLPHINSCHEDULER_HOME/alert-server/libs/$MYSQL_DRIVER 
$DOLPHINSCHEDULER_HOME/tools/libs/$MYSQL_DRIVER
 
 #Deploy
-COPY .github/workflows/cluster-test/mysql/deploy.sh /root/deploy.sh
+COPY .github/workflows/cluster-test/mysql_with_mysql_registry/deploy.sh 
/root/deploy.sh
 
 CMD [ "/bin/bash", "/root/deploy.sh" ]
diff --git a/.github/workflows/cluster-test/mysql/deploy.sh 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/deploy.sh
similarity index 95%
copy from .github/workflows/cluster-test/mysql/deploy.sh
copy to .github/workflows/cluster-test/mysql_with_mysql_registry/deploy.sh
index 722a4b849f..72b2a630fa 100644
--- a/.github/workflows/cluster-test/mysql/deploy.sh
+++ b/.github/workflows/cluster-test/mysql_with_mysql_registry/deploy.sh
@@ -35,6 +35,7 @@ service ssh start
 
 #Init schema
 /bin/bash $DOLPHINSCHEDULER_HOME/tools/bin/upgrade-schema.sh
+/bin/bash $DOLPHINSCHEDULER_HOME/tools/bin/initialize-jdbc-registry.sh
 
 #Start Cluster
 /bin/bash $DOLPHINSCHEDULER_HOME/bin/start-all.sh
diff --git a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-base.yaml
similarity index 70%
copy from .github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
copy to 
.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-base.yaml
index 7343c8eee7..d59e3c868c 100644
--- a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
+++ 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-base.yaml
@@ -18,12 +18,17 @@
 version: "3"
 
 services:
-  ds:
-    container_name: ds
-    image: jdk8:ds_mysql_cluster
+  mysql:
+    container_name: mysql
+    image: mysql:5.7.36
+    command: --default-authentication-plugin=mysql_native_password
     restart: always
+    environment:
+      MYSQL_ROOT_PASSWORD: 123456
     ports:
-      - "12345:12345"
-      - "5679:5679"
-      - "1235:1235"
-      - "50053:50053"
+      - "3306:3306"
+    healthcheck:
+      test: mysqladmin ping -h 127.0.0.1 -u root 
--password=$$MYSQL_ROOT_PASSWORD
+      interval: 5s
+      timeout: 60s
+      retries: 120
diff --git a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-cluster.yaml
similarity index 100%
copy from .github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
copy to 
.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-cluster.yaml
diff --git a/.github/workflows/cluster-test/mysql/dolphinscheduler_env.sh 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/dolphinscheduler_env.sh
similarity index 91%
copy from .github/workflows/cluster-test/mysql/dolphinscheduler_env.sh
copy to 
.github/workflows/cluster-test/mysql_with_mysql_registry/dolphinscheduler_env.sh
index 671c70a5bb..58937e740c 100755
--- a/.github/workflows/cluster-test/mysql/dolphinscheduler_env.sh
+++ 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/dolphinscheduler_env.sh
@@ -31,9 +31,10 @@ export 
SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
 export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}
 
 # Registry center configuration, determines the type and link of the registry 
center
-export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
-export 
REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-zoo1:2181,zoo2:2182,zoo3:2183}
-export REGISTRY_ZOOKEEPER_BLOCK_UNTIL_CONNECTED=30000ms
+export REGISTRY_TYPE=${REGISTRY_TYPE:-jdbc}
+export 
REGISTRY_HIKARI_CONFIG_JDBC_URL="jdbc:mysql://mysql:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
+export REGISTRY_HIKARI_CONFIG_USERNAME=root
+export REGISTRY_HIKARI_CONFIG_PASSWORD=123456
 
 # Tasks related configurations, need to change the configuration if you use 
the related tasks.
 export HADOOP_HOME=${HADOOP_HOME:-/opt/soft/hadoop}
diff --git a/.github/workflows/cluster-test/postgresql/install_env.sh 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/install_env.sh
similarity index 96%
copy from .github/workflows/cluster-test/postgresql/install_env.sh
copy to .github/workflows/cluster-test/mysql_with_mysql_registry/install_env.sh
index e43813479b..cd660febf8 100644
--- a/.github/workflows/cluster-test/postgresql/install_env.sh
+++ b/.github/workflows/cluster-test/mysql_with_mysql_registry/install_env.sh
@@ -56,6 +56,3 @@ 
installPath=${installPath:-"/root/apache-dolphinscheduler-*-SNAPSHOT-bin"}
 # script. The user needs to have sudo privileges and permissions to operate 
hdfs. If hdfs is enabled than the root directory needs
 # to be created by this user
 deployUser=${deployUser:-"dolphinscheduler"}
-
-# The root of zookeeper, for now DolphinScheduler default registry server is 
zookeeper.
-zkRoot=${zkRoot:-"/dolphinscheduler"}
diff --git a/.github/workflows/cluster-test/mysql/running_test.sh 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/running_test.sh
similarity index 100%
copy from .github/workflows/cluster-test/mysql/running_test.sh
copy to .github/workflows/cluster-test/mysql_with_mysql_registry/running_test.sh
diff --git a/.github/workflows/cluster-test/mysql/start-job.sh 
b/.github/workflows/cluster-test/mysql_with_mysql_registry/start-job.sh
similarity index 74%
copy from .github/workflows/cluster-test/mysql/start-job.sh
copy to .github/workflows/cluster-test/mysql_with_mysql_registry/start-job.sh
index ee67c5179b..0ce48c64ae 100644
--- a/.github/workflows/cluster-test/mysql/start-job.sh
+++ b/.github/workflows/cluster-test/mysql_with_mysql_registry/start-job.sh
@@ -18,16 +18,16 @@
 set -euox pipefail
 
 #Start base service containers
-docker-compose -f 
.github/workflows/cluster-test/mysql/docker-compose-base.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-base.yaml
 up -d
 
 #Build ds mysql cluster image
-docker build -t jdk8:ds_mysql_cluster -f 
.github/workflows/cluster-test/mysql/Dockerfile .
+docker build -t jdk8:ds_mysql_cluster -f 
.github/workflows/cluster-test/mysql_with_mysql_registry/Dockerfile .
 
 #Start ds mysql cluster container
-docker-compose -f 
.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/mysql_with_mysql_registry/docker-compose-cluster.yaml
 up -d
 
 #Running tests
-/bin/bash .github/workflows/cluster-test/mysql/running_test.sh
+/bin/bash 
.github/workflows/cluster-test/mysql_with_mysql_registry/running_test.sh
 
 #Cleanup
 docker rm -f $(docker ps -aq)
diff --git a/.github/workflows/cluster-test/mysql/Dockerfile 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/Dockerfile
similarity index 84%
rename from .github/workflows/cluster-test/mysql/Dockerfile
rename to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/Dockerfile
index c7d6abe889..574c059442 100644
--- a/.github/workflows/cluster-test/mysql/Dockerfile
+++ b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/Dockerfile
@@ -28,10 +28,10 @@ RUN mv /root/apache-dolphinscheduler-*-SNAPSHOT-bin 
/root/apache-dolphinschedule
 ENV DOLPHINSCHEDULER_HOME /root/apache-dolphinscheduler-test-SNAPSHOT-bin
 
 #Setting install.sh
-COPY .github/workflows/cluster-test/mysql/install_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
+COPY 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/install_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
 
 #Setting dolphinscheduler_env.sh
-COPY .github/workflows/cluster-test/mysql/dolphinscheduler_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
+COPY 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/dolphinscheduler_env.sh
 $DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
 
 #Download mysql jar
 ENV MYSQL_URL 
"https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar";
@@ -43,6 +43,6 @@ cp $DOLPHINSCHEDULER_HOME/alert-server/libs/$MYSQL_DRIVER 
$DOLPHINSCHEDULER_HOME
 cp $DOLPHINSCHEDULER_HOME/alert-server/libs/$MYSQL_DRIVER 
$DOLPHINSCHEDULER_HOME/tools/libs/$MYSQL_DRIVER
 
 #Deploy
-COPY .github/workflows/cluster-test/mysql/deploy.sh /root/deploy.sh
+COPY .github/workflows/cluster-test/mysql_with_zookeeper_registry/deploy.sh 
/root/deploy.sh
 
 CMD [ "/bin/bash", "/root/deploy.sh" ]
diff --git a/.github/workflows/cluster-test/mysql/deploy.sh 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/deploy.sh
similarity index 100%
rename from .github/workflows/cluster-test/mysql/deploy.sh
rename to .github/workflows/cluster-test/mysql_with_zookeeper_registry/deploy.sh
diff --git a/.github/workflows/cluster-test/mysql/docker-compose-base.yaml 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/docker-compose-base.yaml
similarity index 100%
rename from .github/workflows/cluster-test/mysql/docker-compose-base.yaml
rename to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/docker-compose-base.yaml
diff --git a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/docker-compose-cluster.yaml
similarity index 100%
copy from .github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
copy to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/docker-compose-cluster.yaml
diff --git a/.github/workflows/cluster-test/mysql/dolphinscheduler_env.sh 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/dolphinscheduler_env.sh
similarity index 100%
rename from .github/workflows/cluster-test/mysql/dolphinscheduler_env.sh
rename to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/dolphinscheduler_env.sh
diff --git a/.github/workflows/cluster-test/mysql/install_env.sh 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/install_env.sh
similarity index 100%
rename from .github/workflows/cluster-test/mysql/install_env.sh
rename to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/install_env.sh
diff --git a/.github/workflows/cluster-test/mysql/running_test.sh 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/running_test.sh
similarity index 100%
rename from .github/workflows/cluster-test/mysql/running_test.sh
rename to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/running_test.sh
diff --git a/.github/workflows/cluster-test/mysql/start-job.sh 
b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/start-job.sh
similarity index 74%
rename from .github/workflows/cluster-test/mysql/start-job.sh
rename to 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/start-job.sh
index ee67c5179b..db8d23147e 100644
--- a/.github/workflows/cluster-test/mysql/start-job.sh
+++ b/.github/workflows/cluster-test/mysql_with_zookeeper_registry/start-job.sh
@@ -18,16 +18,16 @@
 set -euox pipefail
 
 #Start base service containers
-docker-compose -f 
.github/workflows/cluster-test/mysql/docker-compose-base.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/docker-compose-base.yaml
 up -d
 
 #Build ds mysql cluster image
-docker build -t jdk8:ds_mysql_cluster -f 
.github/workflows/cluster-test/mysql/Dockerfile .
+docker build -t jdk8:ds_mysql_cluster -f 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/Dockerfile .
 
 #Start ds mysql cluster container
-docker-compose -f 
.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/docker-compose-cluster.yaml
 up -d
 
 #Running tests
-/bin/bash .github/workflows/cluster-test/mysql/running_test.sh
+/bin/bash 
.github/workflows/cluster-test/mysql_with_zookeeper_registry/running_test.sh
 
 #Cleanup
 docker rm -f $(docker ps -aq)
diff --git a/.github/workflows/cluster-test/postgresql/Dockerfile 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/Dockerfile
similarity index 77%
copy from .github/workflows/cluster-test/postgresql/Dockerfile
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/Dockerfile
index 38234ee7b3..bb2d9a5383 100644
--- a/.github/workflows/cluster-test/postgresql/Dockerfile
+++ 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/Dockerfile
@@ -28,12 +28,12 @@ RUN mv /root/apache-dolphinscheduler-*-SNAPSHOT-bin 
/root/apache-dolphinschedule
 ENV DOLPHINSCHEDULER_HOME /root/apache-dolphinscheduler-test-SNAPSHOT-bin
 
 #Setting install.sh
-COPY .github/workflows/cluster-test/postgresql/install_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
+COPY 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/install_env.sh
 $DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
 
 #Setting dolphinscheduler_env.sh
-COPY .github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
+COPY 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/dolphinscheduler_env.sh
 $DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
 
 #Deploy
-COPY .github/workflows/cluster-test/postgresql/deploy.sh /root/deploy.sh
+COPY 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/deploy.sh 
/root/deploy.sh
 
 CMD [ "/bin/bash", "/root/deploy.sh" ]
diff --git a/.github/workflows/cluster-test/postgresql/deploy.sh 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/deploy.sh
similarity index 94%
copy from .github/workflows/cluster-test/postgresql/deploy.sh
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/deploy.sh
index f7547d40b4..37bf3433c0 100644
--- a/.github/workflows/cluster-test/postgresql/deploy.sh
+++ 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/deploy.sh
@@ -32,6 +32,7 @@ service ssh start
 
 #Init schema
 /bin/bash $DOLPHINSCHEDULER_HOME/tools/bin/upgrade-schema.sh
+/bin/bash $DOLPHINSCHEDULER_HOME/tools/bin/initialize-jdbc-registry.sh
 
 #Start Cluster
 /bin/bash $DOLPHINSCHEDULER_HOME/bin/start-all.sh
diff --git a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-base.yaml
similarity index 73%
copy from .github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-base.yaml
index 7343c8eee7..1793d94f39 100644
--- a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
+++ 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-base.yaml
@@ -18,12 +18,18 @@
 version: "3"
 
 services:
-  ds:
-    container_name: ds
-    image: jdk8:ds_mysql_cluster
+  postgres:
+    container_name: postgres
+    image: postgres:14.1
     restart: always
+    environment:
+      POSTGRES_PASSWORD: postgres
+      POSTGRES_DB: dolphinscheduler
     ports:
-      - "12345:12345"
-      - "5679:5679"
-      - "1235:1235"
-      - "50053:50053"
+      - "5432:5432"
+    healthcheck:
+      test: ["CMD-SHELL", "pg_isready -U postgres"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
diff --git 
a/.github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-cluster.yaml
similarity index 100%
copy from .github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-cluster.yaml
diff --git a/.github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/dolphinscheduler_env.sh
similarity index 93%
copy from .github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/dolphinscheduler_env.sh
index 1dbd63254e..e7fd1b7204 100644
--- a/.github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh
+++ 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/dolphinscheduler_env.sh
@@ -31,9 +31,10 @@ export 
SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
 export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}
 
 # Registry center configuration, determines the type and link of the registry 
center
-export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
-export 
REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-zoo1:2181,zoo2:2182,zoo3:2183}
-export REGISTRY_ZOOKEEPER_BLOCK_UNTIL_CONNECTED=30000ms
+export REGISTRY_TYPE=jdbc
+export 
REGISTRY_HIKARI_CONFIG_JDBC_URL="jdbc:postgresql://postgres:5432/dolphinscheduler"
+export REGISTRY_HIKARI_CONFIG_USERNAME=postgres
+export REGISTRY_HIKARI_CONFIG_PASSWORD=postgres
 
 # Tasks related configurations, need to change the configuration if you use 
the related tasks.
 export HADOOP_HOME=${HADOOP_HOME:-/opt/soft/hadoop}
diff --git a/.github/workflows/cluster-test/postgresql/install_env.sh 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/install_env.sh
similarity index 96%
copy from .github/workflows/cluster-test/postgresql/install_env.sh
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/install_env.sh
index e43813479b..cd660febf8 100644
--- a/.github/workflows/cluster-test/postgresql/install_env.sh
+++ 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/install_env.sh
@@ -56,6 +56,3 @@ 
installPath=${installPath:-"/root/apache-dolphinscheduler-*-SNAPSHOT-bin"}
 # script. The user needs to have sudo privileges and permissions to operate 
hdfs. If hdfs is enabled than the root directory needs
 # to be created by this user
 deployUser=${deployUser:-"dolphinscheduler"}
-
-# The root of zookeeper, for now DolphinScheduler default registry server is 
zookeeper.
-zkRoot=${zkRoot:-"/dolphinscheduler"}
diff --git a/.github/workflows/cluster-test/postgresql/running_test.sh 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/running_test.sh
similarity index 100%
copy from .github/workflows/cluster-test/postgresql/running_test.sh
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/running_test.sh
diff --git a/.github/workflows/cluster-test/postgresql/start-job.sh 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/start-job.sh
similarity index 72%
copy from .github/workflows/cluster-test/postgresql/start-job.sh
copy to 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/start-job.sh
index ba0878e3ec..e2b6b630e8 100644
--- a/.github/workflows/cluster-test/postgresql/start-job.sh
+++ 
b/.github/workflows/cluster-test/postgresql_with_postgresql_registry/start-job.sh
@@ -18,16 +18,16 @@
 set -euox pipefail
 
 #Start base service containers
-docker-compose -f 
.github/workflows/cluster-test/postgresql/docker-compose-base.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-base.yaml
 up -d
 
 #Build ds postgresql cluster image
-docker build -t jdk8:ds_postgresql_cluster -f 
.github/workflows/cluster-test/postgresql/Dockerfile .
+docker build -t jdk8:ds_postgresql_cluster -f 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/Dockerfile .
 
 #Start ds postgresql cluster container
-docker-compose -f 
.github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/docker-compose-cluster.yaml
 up -d
 
 #Running tests
-/bin/bash .github/workflows/cluster-test/postgresql/running_test.sh
+/bin/bash 
.github/workflows/cluster-test/postgresql_with_postgresql_registry/running_test.sh
 
 #Cleanup
 docker rm -f $(docker ps -aq)
diff --git a/.github/workflows/cluster-test/postgresql/Dockerfile 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/Dockerfile
similarity index 77%
rename from .github/workflows/cluster-test/postgresql/Dockerfile
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/Dockerfile
index 38234ee7b3..077b5c97b8 100644
--- a/.github/workflows/cluster-test/postgresql/Dockerfile
+++ 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/Dockerfile
@@ -28,12 +28,12 @@ RUN mv /root/apache-dolphinscheduler-*-SNAPSHOT-bin 
/root/apache-dolphinschedule
 ENV DOLPHINSCHEDULER_HOME /root/apache-dolphinscheduler-test-SNAPSHOT-bin
 
 #Setting install.sh
-COPY .github/workflows/cluster-test/postgresql/install_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
+COPY 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/install_env.sh
 $DOLPHINSCHEDULER_HOME/bin/env/install_env.sh
 
 #Setting dolphinscheduler_env.sh
-COPY .github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh 
$DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
+COPY 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/dolphinscheduler_env.sh
 $DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh
 
 #Deploy
-COPY .github/workflows/cluster-test/postgresql/deploy.sh /root/deploy.sh
+COPY 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/deploy.sh 
/root/deploy.sh
 
 CMD [ "/bin/bash", "/root/deploy.sh" ]
diff --git a/.github/workflows/cluster-test/postgresql/deploy.sh 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/deploy.sh
similarity index 100%
rename from .github/workflows/cluster-test/postgresql/deploy.sh
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/deploy.sh
diff --git a/.github/workflows/cluster-test/postgresql/docker-compose-base.yaml 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/docker-compose-base.yaml
similarity index 100%
rename from .github/workflows/cluster-test/postgresql/docker-compose-base.yaml
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/docker-compose-base.yaml
diff --git 
a/.github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/docker-compose-cluster.yaml
similarity index 100%
rename from 
.github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/docker-compose-cluster.yaml
diff --git a/.github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/dolphinscheduler_env.sh
similarity index 100%
rename from .github/workflows/cluster-test/postgresql/dolphinscheduler_env.sh
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/dolphinscheduler_env.sh
diff --git a/.github/workflows/cluster-test/postgresql/install_env.sh 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/install_env.sh
similarity index 100%
rename from .github/workflows/cluster-test/postgresql/install_env.sh
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/install_env.sh
diff --git a/.github/workflows/cluster-test/postgresql/running_test.sh 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/running_test.sh
similarity index 100%
rename from .github/workflows/cluster-test/postgresql/running_test.sh
rename to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/running_test.sh
diff --git a/.github/workflows/cluster-test/postgresql/start-job.sh 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/start-job.sh
similarity index 73%
copy from .github/workflows/cluster-test/postgresql/start-job.sh
copy to 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/start-job.sh
index ba0878e3ec..fe755c97f1 100644
--- a/.github/workflows/cluster-test/postgresql/start-job.sh
+++ 
b/.github/workflows/cluster-test/postgresql_with_zookeeper_registry/start-job.sh
@@ -18,16 +18,16 @@
 set -euox pipefail
 
 #Start base service containers
-docker-compose -f 
.github/workflows/cluster-test/postgresql/docker-compose-base.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/docker-compose-base.yaml
 up -d
 
 #Build ds postgresql cluster image
-docker build -t jdk8:ds_postgresql_cluster -f 
.github/workflows/cluster-test/postgresql/Dockerfile .
+docker build -t jdk8:ds_postgresql_cluster -f 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/Dockerfile .
 
 #Start ds postgresql cluster container
-docker-compose -f 
.github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml up -d
+docker-compose -f 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/docker-compose-cluster.yaml
 up -d
 
 #Running tests
-/bin/bash .github/workflows/cluster-test/postgresql/running_test.sh
+/bin/bash 
.github/workflows/cluster-test/postgresql_with_zookeeper_registry/running_test.sh
 
 #Cleanup
 docker rm -f $(docker ps -aq)
diff --git 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
index fd3d4b02e3..ff0088ea8d 100644
--- 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
+++ 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
@@ -27,21 +27,24 @@ import 
org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
 import 
org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
 import org.apache.dolphinscheduler.common.thread.ThreadUtils;
+import 
org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
 import lombok.extern.slf4j.Slf4j;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.event.EventListener;
+import org.springframework.context.annotation.FilterType;
 
-@SpringBootApplication
-@ComponentScan("org.apache.dolphinscheduler")
 @Slf4j
+@SpringBootApplication
+@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
+        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = 
JdbcRegistryAutoConfiguration.class)
+})
 public class AlertServer {
 
     @Autowired
@@ -59,11 +62,11 @@ public class AlertServer {
         
AlertServerMetrics.registerUncachedException(DefaultUncaughtExceptionHandler::getUncaughtExceptionCount);
         
Thread.setDefaultUncaughtExceptionHandler(DefaultUncaughtExceptionHandler.getInstance());
         Thread.currentThread().setName(Constants.THREAD_NAME_ALERT_SERVER);
-        new SpringApplicationBuilder(AlertServer.class).run(args);
+        SpringApplication.run(AlertServer.class, args);
     }
 
-    @EventListener
-    public void run(ApplicationReadyEvent readyEvent) {
+    @PostConstruct
+    public void run() {
         log.info("Alert server is staring ...");
         alertPluginManager.start();
         alertRegistryClient.start();
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
index c7e6d9778f..20a6412076 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/ApiApplicationServer.java
@@ -22,6 +22,7 @@ import org.apache.dolphinscheduler.common.enums.PluginType;
 import 
org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
 import org.apache.dolphinscheduler.dao.PluginDao;
 import org.apache.dolphinscheduler.dao.entity.PluginDefine;
+import 
org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
 import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory;
 import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
 import org.apache.dolphinscheduler.spi.params.PluginParamsTransfer;
@@ -38,11 +39,14 @@ import 
org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
 import org.springframework.context.event.EventListener;
 
 @ServletComponentScan
 @SpringBootApplication
-@ComponentScan("org.apache.dolphinscheduler")
+@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
+        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = 
JdbcRegistryAutoConfiguration.class)
+})
 @Slf4j
 public class ApiApplicationServer {
 
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/PluginDao.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/PluginDao.java
index 71e3be70c4..24cb022881 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/PluginDao.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/PluginDao.java
@@ -29,10 +29,10 @@ import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
 
 @Slf4j
-@Component
+@Repository
 public class PluginDao {
 
     @Autowired
diff --git 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/AlertDaoTest.java
 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/AlertDaoTest.java
similarity index 95%
rename from 
dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/AlertDaoTest.java
rename to 
dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/AlertDaoTest.java
index f2cb503d9b..c0a841c1a0 100644
--- 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/AlertDaoTest.java
+++ 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/AlertDaoTest.java
@@ -15,10 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.dao;
+package org.apache.dolphinscheduler.dao.repository.impl;
 
 import org.apache.dolphinscheduler.common.enums.AlertStatus;
 import org.apache.dolphinscheduler.common.enums.ProfileType;
+import org.apache.dolphinscheduler.dao.AlertDao;
+import org.apache.dolphinscheduler.dao.DaoConfiguration;
 import org.apache.dolphinscheduler.dao.entity.Alert;
 
 import java.util.List;
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
index 752479e600..fd262a8c6e 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
@@ -24,6 +24,7 @@ import 
org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler
 import org.apache.dolphinscheduler.common.thread.ThreadUtils;
 import org.apache.dolphinscheduler.meter.metrics.MetricsProvider;
 import org.apache.dolphinscheduler.meter.metrics.SystemMetrics;
+import 
org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
 import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
 import org.apache.dolphinscheduler.scheduler.api.SchedulerApi;
 import org.apache.dolphinscheduler.server.master.metrics.MasterServerMetrics;
@@ -46,10 +47,13 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @SpringBootApplication
-@ComponentScan("org.apache.dolphinscheduler")
+@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
+        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = 
JdbcRegistryAutoConfiguration.class)
+})
 @EnableTransactionManagement
 @EnableCaching
 @Slf4j
diff --git 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/README.md
 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/README.md
index 3b1a2cb24f..554c375218 100644
--- 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/README.md
+++ 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/README.md
@@ -1,6 +1,7 @@
 # Introduction
 
-This module is the jdbc registry plugin module, this plugin will use jdbc as 
the registry center. Will use the database configuration same as 
DolphinScheduler in api'yaml default.
+This module is the jdbc registry plugin module, this plugin will use jdbc as 
the registry center. Will use the database
+configuration same as DolphinScheduler in api'yaml default.
 
 # How to use
 
@@ -22,8 +23,11 @@ registry:
 After do this two steps, you can start your DolphinScheduler cluster, your 
cluster will use mysql as registry center to
 store server metadata.
 
-NOTE: You need to add `mysql-connector-java.jar` into DS classpath if you use 
mysql database, since this plugin will not bundle this driver in distribution.
-You can get the detail about <a 
href="https://dolphinscheduler.apache.org/en-us/docs/3.1.2/guide/installation/pseudo-cluster";>Initialize
 the Database</a>.
+NOTE: You need to add `mysql-connector-java.jar` into DS classpath if you use 
mysql database, since this plugin will not
+bundle this driver in distribution.
+You can get the detail
+about <a 
href="https://dolphinscheduler.apache.org/en-us/docs/3.1.2/guide/installation/pseudo-cluster";>Initialize
 the
+Database</a>.
 
 ## Optional configuration
 
diff --git 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/pom.xml
 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/pom.xml
index 47b6449293..d4285edfbd 100644
--- 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/pom.xml
+++ 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/pom.xml
@@ -62,6 +62,16 @@
             <artifactId>mybatis-plus</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.logging.log4j</groupId>
+                    <artifactId>log4j-to-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 
 </project>
diff --git 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/java/org/apache/dolphinscheduler/plugin/registry/jdbc/JdbcRegistryConfiguration.java
 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/java/org/apache/dolphinscheduler/plugin/registry/jdbc/JdbcRegistryAutoConfiguration.java
similarity index 65%
rename from 
dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/java/org/apache/dolphinscheduler/plugin/registry/jdbc/JdbcRegistryConfiguration.java
rename to 
dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/java/org/apache/dolphinscheduler/plugin/registry/jdbc/JdbcRegistryAutoConfiguration.java
index 7b37749ab7..09211f99fb 100644
--- 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/java/org/apache/dolphinscheduler/plugin/registry/jdbc/JdbcRegistryConfiguration.java
+++ 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/java/org/apache/dolphinscheduler/plugin/registry/jdbc/JdbcRegistryAutoConfiguration.java
@@ -22,40 +22,56 @@ import 
org.apache.dolphinscheduler.plugin.registry.jdbc.mapper.JdbcRegistryLockM
 
 import org.apache.ibatis.session.SqlSessionFactory;
 
+import lombok.extern.slf4j.Slf4j;
+
 import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
 import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
 import com.zaxxer.hikari.HikariDataSource;
 
-@Configuration
+@Slf4j
+@Configuration(proxyBeanMethods = false)
+@MapperScan("org.apache.dolphinscheduler.plugin.registry.jdbc.mapper")
 @ConditionalOnProperty(prefix = "registry", name = "type", havingValue = 
"jdbc")
-public class JdbcRegistryConfiguration {
+@AutoConfigureAfter(MybatisPlusAutoConfiguration.class)
+public class JdbcRegistryAutoConfiguration {
+
+    public JdbcRegistryAutoConfiguration() {
+        log.info("Load JdbcRegistryAutoConfiguration");
+    }
 
     @Bean
-    @ConditionalOnProperty(prefix = "registry.hikari-config", name = 
"jdbc-url")
-    public SqlSessionFactory 
jdbcRegistrySqlSessionFactory(JdbcRegistryProperties jdbcRegistryProperties) 
throws Exception {
+    @ConditionalOnMissingBean
+    public SqlSessionFactory sqlSessionFactory(JdbcRegistryProperties 
jdbcRegistryProperties) throws Exception {
+        log.info("Initialize jdbcRegistrySqlSessionFactory");
         MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new 
MybatisSqlSessionFactoryBean();
         sqlSessionFactoryBean.setDataSource(new 
HikariDataSource(jdbcRegistryProperties.getHikariConfig()));
         return sqlSessionFactoryBean.getObject();
     }
 
     @Bean
-    public SqlSessionTemplate jdbcRegistrySqlSessionTemplate(SqlSessionFactory 
jdbcRegistrySqlSessionFactory) {
-        
jdbcRegistrySqlSessionFactory.getConfiguration().addMapper(JdbcRegistryDataMapper.class);
-        
jdbcRegistrySqlSessionFactory.getConfiguration().addMapper(JdbcRegistryLockMapper.class);
+    @ConditionalOnMissingBean
+    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory 
jdbcRegistrySqlSessionFactory) {
+        log.info("Initialize jdbcRegistrySqlSessionTemplate");
         return new SqlSessionTemplate(jdbcRegistrySqlSessionFactory);
     }
 
     @Bean
     public JdbcRegistryDataMapper jdbcRegistryDataMapper(SqlSessionTemplate 
jdbcRegistrySqlSessionTemplate) {
+        
jdbcRegistrySqlSessionTemplate.getConfiguration().addMapper(JdbcRegistryDataMapper.class);
         return 
jdbcRegistrySqlSessionTemplate.getMapper(JdbcRegistryDataMapper.class);
     }
 
     @Bean
     public JdbcRegistryLockMapper jdbcRegistryLockMapper(SqlSessionTemplate 
jdbcRegistrySqlSessionTemplate) {
+        
jdbcRegistrySqlSessionTemplate.getConfiguration().addMapper(JdbcRegistryLockMapper.class);
         return 
jdbcRegistrySqlSessionTemplate.getMapper(JdbcRegistryLockMapper.class);
     }
 
diff --git a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/META-INF/spring.factories
similarity index 79%
rename from .github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
rename to 
dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/META-INF/spring.factories
index 7343c8eee7..aabe7e3252 100644
--- a/.github/workflows/cluster-test/mysql/docker-compose-cluster.yaml
+++ 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/META-INF/spring.factories
@@ -1,29 +1,19 @@
-#
-# 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.
-#
-
-version: "3"
-
-services:
-  ds:
-    container_name: ds
-    image: jdk8:ds_mysql_cluster
-    restart: always
-    ports:
-      - "12345:12345"
-      - "5679:5679"
-      - "1235:1235"
-      - "50053:50053"
+#
+# 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.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  
org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration
diff --git 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/mysql_registry_init.sql
 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/mysql_registry_init.sql
index 30af3066ff..6df206b391 100644
--- 
a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/mysql_registry_init.sql
+++ 
b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/src/main/resources/mysql_registry_init.sql
@@ -15,7 +15,6 @@
  * limitations under the License.
 */
 
-SET FOREIGN_KEY_CHECKS = 0;
 
 DROP TABLE IF EXISTS `t_ds_jdbc_registry_data`;
 CREATE TABLE `t_ds_jdbc_registry_data`
diff --git a/.github/workflows/cluster-test/postgresql/start-job.sh 
b/dolphinscheduler-tools/src/main/bin/initialize-jdbc-registry.sh
similarity index 55%
rename from .github/workflows/cluster-test/postgresql/start-job.sh
rename to dolphinscheduler-tools/src/main/bin/initialize-jdbc-registry.sh
index ba0878e3ec..895d62a0bb 100644
--- a/.github/workflows/cluster-test/postgresql/start-job.sh
+++ b/dolphinscheduler-tools/src/main/bin/initialize-jdbc-registry.sh
@@ -15,19 +15,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-set -euox pipefail
 
-#Start base service containers
-docker-compose -f 
.github/workflows/cluster-test/postgresql/docker-compose-base.yaml up -d
+BIN_DIR=$(dirname $0)
+DOLPHINSCHEDULER_HOME=${DOLPHINSCHEDULER_HOME:-$(cd $BIN_DIR/../..; pwd)}
 
-#Build ds postgresql cluster image
-docker build -t jdk8:ds_postgresql_cluster -f 
.github/workflows/cluster-test/postgresql/Dockerfile .
+if [ "$DOCKER" != "true" ]; then
+  source "$DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh"
+fi
 
-#Start ds postgresql cluster container
-docker-compose -f 
.github/workflows/cluster-test/postgresql/docker-compose-cluster.yaml up -d
+JAVA_OPTS=${JAVA_OPTS:-"-server -Duser.timezone=${SPRING_JACKSON_TIME_ZONE} 
-Xms1g -Xmx1g -Xmn512m -XX:+PrintGCDetails -Xloggc:gc.log 
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof"}
 
-#Running tests
-/bin/bash .github/workflows/cluster-test/postgresql/running_test.sh
-
-#Cleanup
-docker rm -f $(docker ps -aq)
+$JAVA_HOME/bin/java $JAVA_OPTS \
+  -cp 
"$DOLPHINSCHEDULER_HOME/tools/conf":"$DOLPHINSCHEDULER_HOME/tools/libs/*":"$DOLPHINSCHEDULER_HOME/tools/sql"
 \
+  -Dspring.profiles.active=${DATABASE} \
+  org.apache.dolphinscheduler.tools.command.CommandApplication
diff --git 
a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/command/CommandApplication.java
 
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/command/CommandApplication.java
new file mode 100644
index 0000000000..1e419f4d19
--- /dev/null
+++ 
b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/command/CommandApplication.java
@@ -0,0 +1,152 @@
+/*
+ * 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.command;
+
+import org.apache.dolphinscheduler.dao.DaoConfiguration;
+import org.apache.dolphinscheduler.dao.plugin.api.dialect.DatabaseDialect;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.DataSource;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+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.stereotype.Component;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+
+// todo: use spring-shell to manage the command
+@SpringBootApplication
+@ImportAutoConfiguration(DaoConfiguration.class)
+public class CommandApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(CommandApplication.class, args);
+    }
+
+    @Component
+    @Slf4j
+    static class JdbcRegistrySchemaInitializeCommand implements 
CommandLineRunner {
+
+        @Autowired
+        private DatabaseDialect databaseDialect;
+
+        @Autowired
+        private DbType dbType;
+
+        @Autowired
+        private DataSource dataSource;
+
+        JdbcRegistrySchemaInitializeCommand() {
+        }
+
+        @Override
+        public void run(String... args) throws Exception {
+            if (databaseDialect.tableExists("t_ds_jdbc_registry_data")
+                    || databaseDialect.tableExists("t_ds_jdbc_registry_lock")) 
{
+                log.warn("t_ds_jdbc_registry_data/t_ds_jdbc_registry_lock 
already exists");
+                return;
+            }
+            if (dbType == DbType.MYSQL) {
+                jdbcRegistrySchemaInitializeInMysql();
+            } else if (dbType == DbType.POSTGRE_SQL) {
+                jdbcRegistrySchemaInitializeInPG();
+            } else {
+                log.error("Unsupported database type: {}", dbType);
+            }
+        }
+
+        private void jdbcRegistrySchemaInitializeInMysql() throws SQLException 
{
+            try (
+                    Connection connection = dataSource.getConnection();
+                    Statement statement = connection.createStatement()) {
+                statement.execute("CREATE TABLE `t_ds_jdbc_registry_data`\n" +
+                        "(\n" +
+                        "    `id`               bigint(11) NOT NULL 
AUTO_INCREMENT COMMENT 'primary key',\n" +
+                        "    `data_key`         varchar(256) NOT NULL COMMENT 
'key, like zookeeper node path',\n" +
+                        "    `data_value`       text         NOT NULL COMMENT 
'data, like zookeeper node value',\n" +
+                        "    `data_type`        tinyint(4) NOT NULL COMMENT 
'1: ephemeral node, 2: persistent node',\n"
+                        +
+                        "    `last_term`        bigint       NOT NULL COMMENT 
'last term time',\n" +
+                        "    `last_update_time` timestamp    NOT NULL DEFAULT 
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'last update time',\n"
+                        +
+                        "    `create_time`      timestamp    NOT NULL DEFAULT 
CURRENT_TIMESTAMP COMMENT 'create time',\n"
+                        +
+                        "    PRIMARY KEY (`id`),\n" +
+                        "    unique (`data_key`)\n" +
+                        ") ENGINE = InnoDB\n" +
+                        "  DEFAULT CHARSET = utf8;");
+
+                statement.execute("CREATE TABLE `t_ds_jdbc_registry_lock`\n" +
+                        "(\n" +
+                        "    `id`               bigint(11) NOT NULL 
AUTO_INCREMENT COMMENT 'primary key',\n" +
+                        "    `lock_key`         varchar(256) NOT NULL COMMENT 
'lock path',\n" +
+                        "    `lock_owner`       varchar(256) NOT NULL COMMENT 
'the lock owner, ip_processId',\n" +
+                        "    `last_term`        bigint       NOT NULL COMMENT 
'last term time',\n" +
+                        "    `last_update_time` timestamp    NOT NULL DEFAULT 
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'last update time',\n"
+                        +
+                        "    `create_time`      timestamp    NOT NULL DEFAULT 
CURRENT_TIMESTAMP COMMENT 'create time',\n"
+                        +
+                        "    PRIMARY KEY (`id`),\n" +
+                        "    unique (`lock_key`)\n" +
+                        ") ENGINE = InnoDB\n" +
+                        "  DEFAULT CHARSET = utf8;");
+            }
+        }
+
+        private void jdbcRegistrySchemaInitializeInPG() throws SQLException {
+            try (
+                    Connection connection = dataSource.getConnection();
+                    Statement statement = connection.createStatement()) {
+                statement.execute("create table t_ds_jdbc_registry_data\n" +
+                        "(\n" +
+                        "    id               serial\n" +
+                        "        constraint t_ds_jdbc_registry_data_pk primary 
key,\n" +
+                        "    data_key         varchar                          
   not null,\n" +
+                        "    data_value       text                             
   not null,\n" +
+                        "    data_type        int4                             
   not null,\n" +
+                        "    last_term        bigint                           
   not null,\n" +
+                        "    last_update_time timestamp default 
current_timestamp not null,\n" +
+                        "    create_time      timestamp default 
current_timestamp not null\n" +
+                        ");");
+                statement.execute(
+                        "create unique index 
t_ds_jdbc_registry_data_key_uindex on t_ds_jdbc_registry_data (data_key);");
+                statement.execute("create table t_ds_jdbc_registry_lock\n" +
+                        "(\n" +
+                        "    id               serial\n" +
+                        "        constraint t_ds_jdbc_registry_lock_pk primary 
key,\n" +
+                        "    lock_key         varchar                          
   not null,\n" +
+                        "    lock_owner       varchar                          
   not null,\n" +
+                        "    last_term        bigint                           
   not null,\n" +
+                        "    last_update_time timestamp default 
current_timestamp not null,\n" +
+                        "    create_time      timestamp default 
current_timestamp not null\n" +
+                        ");");
+                statement.execute(
+                        "create unique index 
t_ds_jdbc_registry_lock_key_uindex on t_ds_jdbc_registry_lock (lock_key);");
+            }
+        }
+
+    }
+}
diff --git a/dolphinscheduler-tools/src/main/resources/application.yaml 
b/dolphinscheduler-tools/src/main/resources/application.yaml
index 38752021dc..136a4c5fd4 100644
--- a/dolphinscheduler-tools/src/main/resources/application.yaml
+++ b/dolphinscheduler-tools/src/main/resources/application.yaml
@@ -63,6 +63,8 @@ spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: 
jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
+    username: root
+    password: root
 
 ---
 spring:
diff --git 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
index 86e755fc8a..b0866f7fd8 100644
--- 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
+++ 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
@@ -24,6 +24,7 @@ import 
org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler
 import org.apache.dolphinscheduler.common.thread.ThreadUtils;
 import org.apache.dolphinscheduler.meter.metrics.MetricsProvider;
 import org.apache.dolphinscheduler.meter.metrics.SystemMetrics;
+import 
org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
 import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
 import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
 import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
@@ -47,11 +48,14 @@ import 
org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @SpringBootApplication
 @EnableTransactionManagement
-@ComponentScan(basePackages = "org.apache.dolphinscheduler")
+@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
+        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = 
JdbcRegistryAutoConfiguration.class)
+})
 @Slf4j
 public class WorkerServer implements IStoppable {
 

Reply via email to