All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xin.bluesky.leiothrix.server.tablemeta.DatabaseSchemaLoader Maven / Gradle / Ivy

The newest version!
package xin.bluesky.leiothrix.server.tablemeta;

import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import xin.bluesky.leiothrix.model.db.DatabaseInfo;
import xin.bluesky.leiothrix.model.db.DialectType;
import xin.bluesky.leiothrix.model.task.TaskStaticInfo;
import xin.bluesky.leiothrix.server.conf.ConfigureException;
import xin.bluesky.leiothrix.server.storage.TaskStorage;

import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * @author 张轲
 */
public abstract class DatabaseSchemaLoader {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseSchemaLoader.class);

    private static Map map = ImmutableMap.of(DialectType.MYSQL, new MySQLSchemaLoader());

    private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(5, 20, 60, SECONDS, new LinkedBlockingDeque<>(),
            new ThreadFactoryBuilder().setNameFormat("database-split-%d").build(), new CallerRunsPolicy());

    public static void loadDatabaseSchema(String taskId) {
        TaskStaticInfo taskStaticInfo = TaskStorage.getTaskStaticInfo(taskId);
        DatabaseInfo anyDatabaseInfo = taskStaticInfo.getTaskConfig().getDatabaseInfoList().get(0);
        DatabaseSchemaLoader loader = map.get(anyDatabaseInfo.getDialect());
        if (loader == null) {
            throw new ConfigureException(String.format("不支持%s数据库", anyDatabaseInfo.getDialect()));
        }

        loader.doLoad(taskId, anyDatabaseInfo, taskStaticInfo.getTaskConfig().getTableNameList());
        logger.info("加载数据库Schema完成");
    }

    protected void submit(RangeSplitter splitter) {
        executorService.submit(splitter);
    }

    protected abstract void doLoad(String taskId, DatabaseInfo databaseInfo, List tableList);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy