fix: 优化了动态数据源识别不到oracle问题
This commit is contained in:
parent
f0844de9ec
commit
a472ab2ec7
@ -14,6 +14,8 @@ import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* 动态数据源注册器,从数据库表 {@code GEN_DATASOURCE_CONF} 读取配置,
|
||||
@ -39,9 +41,17 @@ public class DynamicDataSourceRegistry {
|
||||
private DynamicDataSource dynamicDataSource;
|
||||
|
||||
private final Object refreshLock = new Object();
|
||||
private static final ExecutorService REGISTRY_EXECUTOR = Executors.newSingleThreadExecutor(r -> {
|
||||
Thread t = new Thread(r, "dynamic-ds-registry");
|
||||
t.setDaemon(true);
|
||||
return t;
|
||||
});
|
||||
|
||||
/**
|
||||
* 启动时初始化:从数据库表加载所有已启用的数据源并注册
|
||||
* <p>
|
||||
* 异步执行,不阻塞 Spring Boot 启动流程(如 {@code JobRunner} 等 ApplicationRunner)
|
||||
* 即使表不存在或连接不通,主线程启动不受影响,稍后手动 refresh 即可。
|
||||
*/
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
@ -64,6 +74,28 @@ public class DynamicDataSourceRegistry {
|
||||
} catch (Exception e) {
|
||||
log.error("动态数据源初始化失败(业务主库未就绪,稍后手动刷新即可): {}", e.getMessage());
|
||||
}
|
||||
REGISTRY_EXECUTOR.submit(() -> {
|
||||
try {
|
||||
log.info("动态数据源后台初始化开始...");
|
||||
List<GenDatasourceConf> configs = loadConfigs();
|
||||
if (configs.isEmpty()) {
|
||||
log.info("GEN_DATASOURCE_CONF 表中无已启用的动态数据源配置,跳过注册");
|
||||
return;
|
||||
}
|
||||
int success = 0;
|
||||
int fail = 0;
|
||||
for (GenDatasourceConf conf : configs) {
|
||||
if (tryRegister(conf)) {
|
||||
success++;
|
||||
} else {
|
||||
fail++;
|
||||
}
|
||||
}
|
||||
log.info("动态数据源初始化完成: 成功={}, 失败={}", success, fail);
|
||||
} catch (Exception e) {
|
||||
log.error("动态数据源初始化失败(业务主库未就绪,稍后手动刷新即可): {}", e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -78,7 +78,7 @@ public class ImeServiceImpl implements ImeService {
|
||||
sql.append(" GROUP BY t.BASE_ID, t.STTP ")
|
||||
.append(") s ON s.baseId = h.BASEID ")
|
||||
.append("WHERE 1 = 1 ")
|
||||
.append("AND NVL(h.IS_DELETED, 0) = 0 ")
|
||||
.append("AND NVL(h.IS_DELETED, 0) = 0 AND h.BASEID !='all' ")
|
||||
.append("AND NVL(h.ENABLED, 1) = 1 ");
|
||||
// baseId / baseName 等其它前端过滤(除 sttpCode 外)
|
||||
String filterSql = buildImeBaseStatFilterCondition(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user