001package com.mybatisflex.core.datasource;
002
003import javax.sql.DataSource;
004import java.util.Map;
005
006/**
007 * 数据源缺失处理器接口。当尝试获取指定数据源但不存在时,通过此接口进行动态处理。
008 *
009 * <p>
010 * 该接口被设计为函数式接口,可通过Lambda表达式或方法引用实现,用于在运行时动态处理缺失的数据源。<br/>
011 * 常见应用场景:<br/>
012 * - 多租户系统中根据租户ID动态创建并缓存数据源;<br/>
013 * - 数据源缺失时的主动初始化;
014 * </p>
015 */
016@FunctionalInterface
017public interface DataSourceMissingHandler {
018    /**
019     * 处理缺失数据源的核心方法。
020     *
021     * @param dataSourceKey 当前请求的数据源键(标识符),通常用于识别目标数据源
022     * @param dataSourceMap 当前已存在的数据源集合(key: 数据源键,value: 数据源实例)
023     * @return 处理后的新数据源集合,通常应包含原有数据源及新增处理的数据源
024     * @implSpec 实现类应通过此方法实现:<br/>
025     * 1. 根据dataSourceKey识别需要补充的数据源<br/>
026     * 2. 创建/配置新的DataSource实例<br/>
027     * 3. 将新数据源添加到dataSourceMap中<br/>
028     * 4. 返回更新后的数据源集合<br/>
029     * 5. 如返回 null 或 Map 为空,后续会抛出异常。<br/>
030     * @example 示例场景:
031     * 当请求"tenant_123"数据源不存在时,在此方法中创建对应数据源并放入返回的Map
032     */
033    Map<String, DataSource> handle(String dataSourceKey, Map<String, DataSource> dataSourceMap);
034}