org.test4j.module.database.enviroment.DBEnvironmentFactory Maven / Gradle / Ivy
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());
}
}
}
}