Browse Source

增加数据库类型支持:Mysql、SQLServer

chenw 6 years ago
parent
commit
9d65002254

+ 13 - 4
bi-core/src/main/java/com/usoftchina/bi/core/jdbc/DynamicDataSourceRegister.java

@@ -98,10 +98,19 @@ public class DynamicDataSourceRegister implements ImportBeanDefinitionRegistrar,
             while(rs.next()){
                 // 多个数据源
                 Map<String, Object> dsMap = new HashMap<>();
-                String dei = rs.getString("database_type");
-                dsMap.put("driver", "oracle.jdbc.driver.OracleDriver");
-                dsMap.put("url", "jdbc:" + "oracle" + ":thin:@"+ rs.getString("addrass") + ":"
-                        + rs.getString("port") + ":" + rs.getString("data_name"));
+                String databaseType = rs.getString("database_type");
+                if ("oracle".equals(databaseType)) {
+                    driver = "oracle.jdbc.driver.OracleDriver";
+                    url = String.format("jdbc:oracle:thin:@%s:%s:%s", rs.getString("addrass"), rs.getString("port"), rs.getString("data_name"));
+                }else if ("mysql".equals(databaseType)) {
+                    driver = "com.mysql.jdbc.Driver";
+                    url = String.format("jdbc:mysql://%s:%s/%s?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC", rs.getString("addrass"), rs.getString("port"), rs.getString("data_name"));
+                }else if("sqlServer".equals(databaseType)) {
+                    driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+                    url = String.format("jdbc:sqlserver://%s:%s;DatabaseName=%s", rs.getString("addrass"), rs.getString("port"), rs.getString("data_name"));
+                }
+                dsMap.put("driver", driver);
+                dsMap.put("url", url);
                 dsMap.put("username", rs.getString("user_name"));
                 dsMap.put("password", rs.getString("pass_word"));
                 DataSource ds = buildDataSource(dsMap);

+ 9 - 4
bi-server/pom.xml

@@ -27,18 +27,23 @@
       <groupId>com.usoftchina.platform</groupId>
       <artifactId>bi-auth</artifactId>
     </dependency>
-    <!-- Mysql -->
-    <!--<dependency>
+     <!-- Mysql -->
+    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
     </dependency>
-    -->
-    <!-- oracle -->
+    <!-- Oracle -->
     <dependency>
       <groupId>ojdbc6</groupId>
       <artifactId>ojdbc6</artifactId>
       <version>11.2.0</version>
     </dependency>
+    <!-- SQLServer -->
+    <dependency>
+      <groupId>com.microsoft.sqlserver</groupId>
+      <artifactId>mssql-jdbc</artifactId>
+      <version>4.2.0</version>
+    </dependency>
     <!-- JWT -->
     <dependency>
       <groupId>com.auth0</groupId>

+ 0 - 1
bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataConnectorController.java

@@ -114,7 +114,6 @@ public class DataConnectorController {
     执行数据源配置
     */
     @ApiOperation(value = "执行数据源配置", notes = "执行数据源配置", response = RepEntity.class)
-    @TargetDataSource
     @CheckToken
     @PostMapping("/implementSql")
     @Auth(user = "admin")

+ 8 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/vo/configVo/PopulationInfo.java

@@ -10,7 +10,15 @@ public class PopulationInfo {
     private List<String> operatorList;
     private List<String> groupByList;
     private List<Screen> filters;
+    private int threshold;
 
+    public int getThreshold() {
+        return threshold;
+    }
+
+    public void setThreshold(int threshold) {
+        this.threshold = threshold;
+    }
 
     public int getId() {
         return id;

+ 13 - 2
bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataBasesService.java

@@ -223,8 +223,19 @@ public class DataBasesService {
     public void addDataSource(DatabasesInfo databasesInfo) {
         //额外的数据源
         Map<String, Object> dsMap = new HashMap<>();
-        dsMap.put("driver", "oracle.jdbc.driver.OracleDriver");
-        dsMap.put("url", "jdbc:oracle:thin:@" + databasesInfo.getAddrass() +":" + databasesInfo.getPort() + ":" + databasesInfo.getDataName());
+        String driver = "", url = "";
+        if ("oracle".equals(databasesInfo.getDatabaseType())) {
+            driver = "oracle.jdbc.driver.OracleDriver";
+            url = String.format("jdbc:oracle:thin:@%s:%s:%s", databasesInfo.getAddrass(), databasesInfo.getPort(), databasesInfo.getDataName());
+        }else if ("mysql".equals(databasesInfo.getDatabaseType())) {
+            driver = "com.mysql.jdbc.Driver";
+            url = String.format("jdbc:mysql://%s:%s/%s?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC", databasesInfo.getAddrass(), databasesInfo.getPort(), databasesInfo.getDataName());
+        }else if("sqlServer".equals(databasesInfo.getDatabaseType())) {
+            driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+            url = String.format("jdbc:sqlserver://%s:%s;DatabaseName=%s", databasesInfo.getAddrass(), databasesInfo.getPort(), databasesInfo.getDataName());
+        }
+        dsMap.put("driver", driver);
+        dsMap.put("url", url);
         dsMap.put("username", databasesInfo.getUserName());
         dsMap.put("password", databasesInfo.getPassWord());
         Map<Object, Object> target = dataSourceRegister.getTargetDataSources();

+ 20 - 3
bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/ImplementSqlService.java

@@ -1,6 +1,7 @@
 package com.usoftchina.bi.server.service.dataSource;
 
 import com.usoftchina.bi.core.exception.MyException;
+import com.usoftchina.bi.core.jdbc.DynamicDataSource;
 import com.usoftchina.bi.core.jdbc.DynamicDataSourceContextHolder;
 import com.usoftchina.bi.server.dao.dataSource.DataColumnMapper;
 import com.usoftchina.bi.server.dao.dataSource.DataConnectorMapper;
@@ -39,16 +40,25 @@ public class ImplementSqlService {
                 checkSql.contains("drop") || checkSql.contains("create") || checkSql.contains("comment")){
             return new RepEntity(RepCode.SqlWarn);
         }
+        String databaseType = dataConnectorMapper.getDatabases(toSql.getId()).getDatabaseType();
         String sqlStr = "select * from (" + toSql.getStrSql() + ") where rownum <=1";
+        if ("mysql".equals(databaseType)) {
+            sqlStr = "select * from (" + toSql.getStrSql() + ") tmp limit 0,1";
+        } else if("sqlServer".equals(databaseType)) {
+            sqlStr = "select top 1 * from (" + toSql.getStrSql() + ") tmp";
+        }
         if ("".equals(sqlStr) || sqlStr == null) {
             return new RepEntity(RepCode.ChartsNameNull);
         }
 
         SqlRowSet sqlRowSet = null;
         try {
+            DynamicDataSourceContextHolder.setDataSourceType(toSql.getId());
             sqlRowSet = jdbcTemplate.queryForRowSet(sqlStr);
         } catch (DataAccessException e) {
             throw new MyException(e.getCause().getMessage());
+        } finally {
+            DynamicDataSourceContextHolder.clearDataSourceType();
         }
         SqlRowSetMetaData metaData = sqlRowSet.getMetaData();
         int length = metaData.getColumnCount();
@@ -130,9 +140,16 @@ public class ImplementSqlService {
         }else {
             password = pw;
         }
-
-        String url = "jdbc:oracle:thin:@" + databases.getAddrass() + ":" + databases.getPort() + ":" + databases
-                .getDataName();
+        String url = "";
+        if ("oracle".equals(databases.getDatabaseType())) {
+            url = String.format("jdbc:oracle:thin:@%s:%s:%s", databases.getAddrass(), databases.getPort(), databases.getDataName());
+        }else if ("mysql".equals(databases.getDatabaseType())) {
+            url = String.format("jdbc:mysql://%s:%s/%s?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC", databases.getAddrass(), databases.getPort(), databases.getDataName());
+        }else if("sqlServer".equals(databases.getDatabaseType())) {
+            url = String.format("jdbc:sqlserver://%s:%s;DatabaseName=%s", databases.getAddrass(), databases.getPort(), databases.getDataName());
+        }else {
+            throw new MyException("不支持的数据库类型");
+        }
         String username = databases.getUserName();
         Connection con = null;
         try {

+ 1 - 1
pom.xml

@@ -35,7 +35,7 @@
     <alibaba.druid.version>1.1.10</alibaba.druid.version>
     <pagehelper.starter.version>1.2.7</pagehelper.starter.version>
     <swagger.version>2.7.0</swagger.version>
-    <mysql.version>6.0.6</mysql.version>
+    <mysql.version>5.1.47</mysql.version>
     <jwt.version>3.1.0</jwt.version>
     <poi.version>3.17</poi.version>
     <poi-ooxml.version>3.17</poi-ooxml.version>