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

org.test4j.module.database.enviroment.DBEnvironmentFactory Maven / Gradle / Ivy

There is a newer version: 1.1.2
Show newest version
package org.test4j.module.database.enviroment;

import cn.org.atool.fluent.mybatis.metadata.DbType;
import org.test4j.Logger;
import org.test4j.module.database.config.DbConfig;
import org.test4j.module.database.enviroment.types.DefaultEnvironment;
import org.test4j.module.database.enviroment.types.MySqlEnvironment;
import org.test4j.module.database.enviroment.types.OracleEnvironment;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public final class DBEnvironmentFactory {
    private static final Map environments = new HashMap<>();

    private static DBEnvironment createDBEnvironment(String dataSourceName) {
        DbType dbType = DbConfig.instance().dbType(dataSourceName);

        DBEnvironment environment = newInstance(dbType, dataSourceName);
        environments.put(dataSourceName, environment);
        return environment;
    }

    private static DBEnvironment newInstance(DbType dbType, String dataSourceName) {
        if (dbType == null) {
            throw new RuntimeException("DatabaseType can't be null.");
        }
        switch (dbType) {
            case MYSQL:
            case H2:
            case MARIADB:
                return new MySqlEnvironment(dataSourceName);
            case ORACLE:
                return new OracleEnvironment(dataSourceName);
            default:
                return new DefaultEnvironment(dataSourceName);
        }
    }

    public static DBEnvironment getDefaultDBEnvironment() {
        String defaultDataSource = DbConfig.instance().defaultDataSource();
        return getDBEnvironment(defaultDataSource);
    }

    /**
     * 从test4j配置中取指定的数据源
     *
     * @param dataSourceName bean name
     * @return DBEnvironment
     */
    public static DBEnvironment getDBEnvironment(String dataSourceName) {
        return Optional.ofNullable(environments.get(dataSourceName))
            .orElseGet(() -> createDBEnvironment(dataSourceName));
    }

    /**
     * 结束所有可能的事务
     */
    public static void closeDBEnvironment() {
        for (Map.Entry environment : environments.entrySet()) {
            try {
                environment.getValue().commit();
            } catch (Throwable e) {
                Logger.warn("commit transactional error: " + e.getMessage());
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy