caixiaofeng пре 10 месеци
родитељ
комит
24607dbf8d

+ 2 - 0
flow-report/flow-report-api/src/main/java/com/flow/service/ReportDatasourceService.java

@@ -21,4 +21,6 @@ public interface ReportDatasourceService extends BaseService<ReportDatasource> {
     void delete(Set<Long> ids);
 
     List<Map<String, Object>> execSql(ExecSql execSql);
+
+    boolean testConnection(ReportDatasource reportDatasource);
 }

+ 14 - 0
flow-report/flow-report-biz/src/main/java/com/flow/service/impl/ReportDatasourceServiceImpl.java

@@ -16,6 +16,8 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.*;
 
 @Service
@@ -73,4 +75,16 @@ public class ReportDatasourceServiceImpl extends BaseServiceImpl<ReportDatasourc
         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
         return jdbcTemplate.queryForList(sql,execSql.getParams());
     }
+
+    @Override
+    public boolean testConnection(ReportDatasource reportDatasource) {
+        try {
+            DataSource dataSource = reportDatasource.buildDataSource();
+            Connection connection = dataSource.getConnection();
+            connection.close();
+            return true;
+        } catch (SQLException e) {
+            throw new BaseException(e.getMessage());
+        }
+    }
 }

+ 5 - 0
flow-report/flow-report-controller/src/main/java/com/flow/controller/ReportDatasourceController.java

@@ -49,4 +49,9 @@ public class ReportDatasourceController {
         return Result.success(reportDatasourceService.execSql(execSql));
     }
 
+    @PostMapping("/connection")
+    public Result<Boolean> testConnection(@RequestBody ReportDatasource reportDatasource) {
+        return Result.success(reportDatasourceService.testConnection(reportDatasource));
+    }
+
 }

+ 4 - 1
flow-report/flow-report-entity/src/main/java/com/flow/entity/ReportDatasource.java

@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.SqlCondition;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.flow.common.mybatis.entity.BaseEntity;
+import com.flow.enums.DatasourceTypeEnum;
 import com.zaxxer.hikari.HikariDataSource;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -16,13 +17,15 @@ public class ReportDatasource extends BaseEntity {
     @TableField(condition = SqlCondition.LIKE)
     private String name;
     private String url;
-    private String driverClass;
+    private DatasourceTypeEnum type;
     private String username;
     private String password;
+    private String remark;
 
     public DataSource buildDataSource() {
         HikariDataSource datasource = new HikariDataSource();
         datasource.setJdbcUrl(url);
+        String driverClass = type.matchDriver();
         datasource.setDriverClassName(driverClass);
         datasource.setUsername(username);
         datasource.setPassword(password);

+ 38 - 0
flow-report/flow-report-entity/src/main/java/com/flow/enums/DatasourceTypeEnum.java

@@ -0,0 +1,38 @@
+package com.flow.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum DatasourceTypeEnum {
+    MYSQL("mysql"),
+    ORACLE("oracle"),
+    SQLSERVER("sqlserver"),
+    POSTGRESQL("postgreSql");
+
+    @EnumValue
+    @JsonValue
+    private final String type;
+
+    /**
+     * 匹配驱动
+     * @return
+     */
+    public String matchDriver() {
+        switch (this) {
+            case MYSQL:
+                return "com.mysql.cj.jdbc.Driver";
+            case ORACLE:
+                return "oracle.jdbc.driver.OracleDriver";
+            case SQLSERVER:
+                return "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+            case POSTGRESQL:
+                return "org.postgresql.Driver";
+            default:
+                return null;
+        }
+    }
+}