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

org.test4j.module.database.proxy.DataSourceCreator Maven / Gradle / Ivy

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

import cn.org.atool.fluent.mybatis.metadata.DbType;
import org.test4j.module.database.config.DbConfig;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

import static org.test4j.module.database.config.DbConfigKey.MysqlDriver;

/**
 * DataSourceCreator: 数据源构造
 *
 * @author darui.wu
 */
public class DataSourceCreator {

    public static Map EXIST_DATASOURCE = new HashMap<>();

    /**
     * 创建数据源, 并执行对应的script脚本
     *
     * @param scriptSourceName 脚本对应的dataSource名称
     * @param dbType           数据库类型
     * @param driver           数据库驱动
     * @param url              db url
     * @param username         db username
     * @param password         db password
     * @return DataSource
     */
    public static DataSource create(String scriptSourceName, DbType dbType, String driver, String url, String username, String password) {
        return create(scriptSourceName, dbType, driver, url, username, password, null);
    }

    /**
     * 创建数据源, 并执行对应的script脚本
     *
     * @param scriptSourceName 脚本对应的dataSource名称
     * @param dbType           数据库类型
     * @param driver           数据库驱动
     * @param url              db url
     * @param username         db username
     * @param password         db password
     * @param schema           db schema
     * @return DataSource
     */
    public static DataSource create(String scriptSourceName, DbType dbType, String driver, String url, String username, String password, String schema) {
        if (EXIST_DATASOURCE.containsKey(url)) {
            return EXIST_DATASOURCE.get(url);
        } else {
            IDataSourceCreator dataSourceFactory = DbConfig.instance().dbCreator(scriptSourceName);
            String _driver = driver == null ? dbType.feature.getDriver() : driver;
            DataSource ds = dataSourceFactory.createDataSource(_driver, url, username, password, schema);
            Test4JDataSource dataSource = new Test4JDataSource(scriptSourceName, ds);
            EXIST_DATASOURCE.put(url, dataSource);

            DataSourceScriptHelper.runInitScripts(dataSource, scriptSourceName, dbType);
            return dataSource;
        }
    }

    /**
     * 根据test4j.properties文件中配置创建数据源
     *
     * @param dataSourceName 配置在test4j.properties文件中的dataSourceName
     * @return DataSource
     */
    public static DataSource create(String dataSourceName) {
        if (EXIST_DATASOURCE.containsKey(dataSourceName)) {
            return EXIST_DATASOURCE.get(dataSourceName);
        } else {
            Test4JDataSource dataSource = createDataSource(dataSourceName);
            EXIST_DATASOURCE.put(dataSourceName, dataSource);

            DataSourceScriptHelper.runInitScripts(dataSource, dataSourceName);
            return dataSource;
        }
    }

    private static Test4JDataSource createDataSource(String dataSourceName) {
        DbType dbType = DbConfig.instance().dbType(dataSourceName);
        DataSource ds;
        if (dbType == DbType.MARIADB) {
            return DataSourceMariaDb4jCreator.createTest4JDataSource(dataSourceName);
        } else if (dbType == DbType.MYSQL && DbConfig.instance().embeddedMysqlEnable()) {
            EmbeddedMysqlConfig config = new EmbeddedMysqlConfig().start();
            ds = DataSourceCreator.create(dataSourceName, DbType.MYSQL, MysqlDriver, config.url(), config.userName, config.password, config.schema);
        } else {
            IDataSourceCreator dataSourceFactory = DbConfig.instance().dbCreator(dataSourceName);
            ds = dataSourceFactory.createDataSource(dataSourceName);
        }
        return ds instanceof Test4JDataSource ? (Test4JDataSource) ds : new Test4JDataSource(dataSourceName, ds);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy