All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.test4j.module.database.proxy.DataSourceCreator Maven / Gradle / Ivy
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);
}
}