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

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

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

import ch.vorburger.exec.ManagedProcessException;
import ch.vorburger.mariadb4j.DB;
import ch.vorburger.mariadb4j.DBConfigurationBuilder;
import org.apache.commons.dbcp2.BasicDataSource;
import org.test4j.module.database.config.DbConfig;
import org.test4j.tools.commons.DateHelper;
import org.test4j.tools.commons.StringHelper;
import org.test4j.tools.config.ConfigHelper;

import javax.sql.DataSource;

import static ch.vorburger.mariadb4j.DB.newEmbeddedDB;
import static ch.vorburger.mariadb4j.DBConfigurationBuilder.newBuilder;
import static org.test4j.Logger.warn;

/**
 * MariaDb4j数据源创建
 */
public class DataSourceMariaDb4jCreator {
    /**
     * MariaDb4j数据源创建
     *
     * @param dataSourceName data source name-
     * @return Test4JDataSource
     */
    public static Test4JDataSource createTest4JDataSource(String dataSourceName) {
        try {
            DataSource dataSource = createDb(dataSourceName);
            return new Test4JDataSource(dataSourceName, dataSource);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * MariaDb4j数据源创建
     *
     * @param dataSourceName data source name-
     * @return BasicDataSource
     */
    static BasicDataSource createDb(String dataSourceName) throws ManagedProcessException {
        String schema = DbConfig.instance().dbSchema(dataSourceName);
        String username = DbConfig.instance().dbUsername(dataSourceName);
        String password = DbConfig.instance().dbPassword(dataSourceName);
        String driver = DbConfig.instance().dbDriver(dataSourceName);
        warn("begin to start MariaDB4j: " + DateHelper.currDateTimeStr());
        int port = ConfigHelper.getInteger("dataSource.mariaDB4j.port", 0);

        DBConfigurationBuilder config = newBuilder().setPort(port);
        addArgs(config);
        DB mariaDB = newEmbeddedDB(config.build());
        mariaDB.start();
        String url = config.getURL(schema);
        warn("MariaDB4j driver[ " + driver + " ], url[ " + url + " ], username[ " + username + " ], password[ " + password + " ].");
        warn("end of start MariaDB4j:" + DateHelper.currDateTimeStr());
        BasicDataSource dataSource = new BasicDataSource();
        {
            dataSource.setDriverClassName(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
        }
        return dataSource;
    }

    private static void addArgs(DBConfigurationBuilder config) {
        String args = ConfigHelper.getString("dataSource.mariaDB4j.args");
        if (StringHelper.isBlank(args)) {
            return;
        }
        String[] items = args.split(";");
        for (String item : items) {
            if (StringHelper.isBlank(item)) {
                continue;
            }
            config.addArg(item);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy