You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by zh...@apache.org on 2021/06/30 09:56:08 UTC

[incubator-shenyu] branch master updated: [Feature #1689] add execute multi-path sql script (#1690)

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

zhangyonglun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new d64801f  [Feature  #1689]  add execute multi-path sql script (#1690)
d64801f is described below

commit d64801ff0c9681278799cc3eef3cddf9204c65ea
Author: xiaoyu <xi...@apache.org>
AuthorDate: Wed Jun 30 17:55:58 2021 +0800

    [Feature  #1689]  add execute multi-path sql script (#1690)
    
    * add Multi-path sql script
    
    * add Multi-path sql script
    
    * fix ci
---
 .../config/properties/DataBaseProperties.java      |  2 -
 .../shenyu/admin/spring/LocalDataSourceLoader.java | 54 +++++++++-------------
 shenyu-admin/src/main/resources/application.yml    |  1 -
 3 files changed, 22 insertions(+), 35 deletions(-)

diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DataBaseProperties.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DataBaseProperties.java
index 3b2e9ec..1222ddc 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DataBaseProperties.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DataBaseProperties.java
@@ -35,7 +35,5 @@ public class DataBaseProperties {
 
     private String initScript;
 
-    private String customInitScript;
-
     private Boolean initEnable;
 }
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
index 3dce1a0..3981d79 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.admin.spring;
 
+import com.google.common.base.Splitter;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -34,10 +35,10 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.sql.Connection;
 import java.sql.DriverManager;
+import java.util.List;
 
 /**
  * for execute schema sql file.
@@ -45,10 +46,12 @@ import java.sql.DriverManager;
 @Slf4j
 @Component
 public class LocalDataSourceLoader implements InstantiationAwareBeanPostProcessor {
+    
+    private static final String PRE_FIX = "file:";
 
     @Resource
     private DataBaseProperties dataBaseProperties;
-
+    
     @Override
     public Object postProcessAfterInitialization(@NonNull final Object bean, final String beanName) throws BeansException {
         if ((bean instanceof DataSourceProperties) && dataBaseProperties.getInitEnable()) {
@@ -73,38 +76,25 @@ public class LocalDataSourceLoader implements InstantiationAwareBeanPostProcesso
         // doesn't print logger
         runner.setLogWriter(null);
         Resources.setCharset(StandardCharsets.UTF_8);
-
-        Reader read = StringUtils.isNotBlank(dataBaseProperties.getCustomInitScript()) ? getResourceAsReader(dataBaseProperties.getCustomInitScript())
-                : Resources.getResourceAsReader(dataBaseProperties.getInitScript());
-
-        log.info("execute shenyu schema sql: {}", StringUtils.isNotBlank(dataBaseProperties.getCustomInitScript()) ? dataBaseProperties.getCustomInitScript()
-                : dataBaseProperties.getInitScript());
-        runner.runScript(read);
+        String initScript = dataBaseProperties.getInitScript();
+        List<String> initScripts = Splitter.on(";").splitToList(initScript); 
+        for (String sqlScript : initScripts) {
+            if (sqlScript.startsWith(PRE_FIX)) {
+                String sqlFile = sqlScript.substring(PRE_FIX.length());
+                Reader fileReader = getResourceAsReader(sqlFile);
+                log.info("execute shenyu schema sql: {}", sqlFile);
+                runner.runScript(fileReader);
+            } else {
+                Reader fileReader = Resources.getResourceAsReader(sqlScript);
+                log.info("execute shenyu schema sql: {}", sqlScript);
+                runner.runScript(fileReader);
+            }
+        }
         runner.closeConnection();
         conn.close();
     }
-
-    /**
-     * resource reader.
-     *
-     * @param resource url
-     * @return Reader
-     * @throws IOException IOException
-     */
-    public static Reader getResourceAsReader(final String resource) throws IOException {
-        return getResourceAsReader(resource, null);
-    }
-
-    /**
-     * resource reader.
-     *
-     * @param resource url
-     * @param charset charset
-     * @return Reader
-     * @throws IOException IOException
-     */
-    public static Reader getResourceAsReader(final String resource, final Charset charset) throws IOException {
-        return new InputStreamReader(new FileInputStream(resource), charset == null ? StandardCharsets.UTF_8 : charset);
+    
+    private static Reader getResourceAsReader(final String resource) throws IOException {
+        return new InputStreamReader(new FileInputStream(resource), StandardCharsets.UTF_8);
     }
-
 }
diff --git a/shenyu-admin/src/main/resources/application.yml b/shenyu-admin/src/main/resources/application.yml
index aa31f57..f485c01 100644
--- a/shenyu-admin/src/main/resources/application.yml
+++ b/shenyu-admin/src/main/resources/application.yml
@@ -50,7 +50,6 @@ shenyu:
   database:
     dialect: mysql
     init_script: "META-INF/schema.sql"
-    #custom_init_script: "/opt/schema.sql"
     init_enable: true
   sync:
     websocket: