Пул подключений с HikariCP к нескольким базам данных

Я разрабатываю плагин мониторинга, который запрашивает несколько баз данных. Я хотел бы использовать HikariCP, чтобы соединение оставалось открытым, но я не знаю, как создать экземпляр пула соединений.

Использует ли HikariCP только один пул для нескольких баз данных? или только один пул для одной базы данных, и я обязан создать столько пулов, сколько базы данных я буду использовать.


person AngocA    schedule 14.11.2014    source источник


Ответы (1)


Последнее: пул связан с параметрами конфигурации одной базы данных, и вы несете ответственность за создание столько пулов, сколько базы данных я буду использовать. Создайте пулы соответственно.

У меня есть DataSourceFactory для этого:

public final class DataSourceFactory {

    private static final Logger LOG = LoggerFactory.getLogger(DataSourceFactory.class);

    //connection to MySQL
    private static DataSource mySQLDataSource;
    //connection to PostgreSQL
    private static DataSource postgresDataSource;

    private DataSourceFactory() { }

    //generic method to create the DataSource based on configuration
    private static DataSource getDataSource(String configurationProperties) {
        Properties conf = new Properties();
        try {
            conf.load(DataSourceFactory.class.getClassLoader().getResourceAsStream(configurationProperties));
        } catch (IOException e) {
            LOG.error("Can't locate database configuration", e);
        }
        HikariConfig config = new HikariConfig(conf);
        HikariDataSource dataSource = new HikariDataSource(config);
        return dataSource;
    }

    //retrieve the datasource for MySQL
    public static DataSource getMySQLDataSource() {
        LOG.debug("Retrieving data source for MySQL");
        if (mySQLDataSource == null) {
            synchronized(DataSourceFactory.class) {
                if (mySQLDataSource == null) {
                    LOG.debug("Creating data source for MySQL");
                    mySQLDataSource = getDataSource("mysql-connection.properties");
                }
            }
        }
        return mySQLDataSource;
    }

    //retrieve the datasource for Postgres
    public static DataSource getPostgresDataSource() {
        LOG.debug("Retrieving data source for Postgres");
        if (postgresDataSource == null) {
            synchronized(DataSourceFactory.class) {
                if (postgresDataSource == null) {
                    LOG.debug("Creating data source for Postgres");
                    postgresDataSource = getDataSource("postgres-connection.properties");
                }
            }
        }
        return postgresDataSource;
    }
}

Вот пример конфигурации файла:

dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
dataSource.url=jdbc:mysql://theHostName:thePort/nameOfDatabase
dataSource.user=user
dataSource.password=thIsIsN07mYR3alPa$s
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=100
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
autoCommit=false
maximumPoolSize=10
person Luiggi Mendoza    schedule 14.11.2014
comment
У вас есть примеры? - person AngocA; 14.11.2014
comment
Опубликован пример @AngocA. - person Luiggi Mendoza; 14.11.2014