邹裕
2 天以前 0120a42fc52d9e55bc22a450e35a24b2d844b8ad
src/main/java/com/hwtd/mes/collect/service/impl/DataCollectionServiceImpl.java
@@ -2,10 +2,12 @@
import com.hwtd.mes.collect.dto.DatabaseDTO;
import com.hwtd.mes.collect.service.DataCollectionService;
import com.hwtd.mes.collect.util.JackcessTableReader;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.sql.*;
@@ -20,8 +22,24 @@
     */
    private final static List<String> MDB_EXCLUDE_TYPES = Arrays.asList("java.sql.Blob");
    /**
     * Access 读取方式:
     * jackcess(默认)—— 用 jackcess 只读直读单表、按需取列,不构建 HSQLDB 镜像,只要表里几列时最快;
     * ucanaccess —— 走原来的 SQL 路径(需要 Access SQL、链接表 remap 等场景时使用)。
     */
    @Value("${mes.access.read-mode:jackcess}")
    private String accessReadMode = "jackcess";
    @Override
    public List<Map<String, Object>> getAccessData(DatabaseDTO databaseDTO) {
        if (databaseDTO == null || StringUtils.isBlank(databaseDTO.getFilePath())) {
            throw new RuntimeException("Access数据库文件路径不能为空");
        }
        // 默认 jackcess 直读:只取某张表的几列不需要 SQL 引擎,也不用等整个库镜像进 HSQLDB
        if (!"ucanaccess".equalsIgnoreCase(StringUtils.trimToEmpty(accessReadMode))) {
            return JackcessTableReader.read(databaseDTO);
        }
        List<Map<String,Object>> list = new ArrayList<>();
        try{
            Properties prop = new Properties();