Избегайте загрузки метаданных с помощью драйвера Postgres JDBC и Apache BasicDataSource

Кто-нибудь знает, как избежать загрузки драйвером Postgres всех метаданных при подключении к базе данных?

Соединение с драйвером занимает около минуты, а с консоли - 1 мс.

Я нашел этот ответ, но для JPA мне нужно что-то вроде этого для JDBC: Hibernate Slow для получения соединения Postgres

Это мои методы менеджера соединений, связанные с вопросом. Я использую HashMap, который содержит BasicDataSource для базы данных, метод для инициализации BasicDataSource для каждой БД и другой для получения соединения из соответствующего источника данных БД.

Задержка более минуты происходит в 'dataSource.getConnection()'

private HashMap<Database, BasicDataSource> dataSources = new HashMap<Database, BasicDataSource>();

private void initializeConnectionPools() throws FileNotFoundException, ReaderException, InterruptedException
    {
        if (dataSources.isEmpty())
        {
            Reader data = ReaderFactory.getReader(Constants.DATA_FILE);
            DatabaseConnectionData connectionData = data.getDatabaseConnectionData();

            String url = Constants.POSTGRESQL_JDBC_PREFIX + connectionData.getHost();

            logger.info("INITIALIZING CONNECTIONS POOL [@" + connectionData.getHost() + "]");

            BasicDataSource dataSource = null;

            for (Database database : Database.values())
            {
                dataSource = new BasicDataSource();
                dataSource.setDriverClassName(Constants.POSTGRESQL_DRIVER_CLASS);
                dataSource.setUrl(url + database.toString().toLowerCase());
                dataSource.setUsername(connectionData.getUser());
                dataSource.setPassword(connectionData.getPassword());
                // Initial size is:
                // The number of browsers multiplied per number of instances
                // allowed for each browser on GRID nodes
                dataSource.setInitialSize(AppnameStation.values().length * 5);
                dataSource.setMaxTotal(-1);

                dataSources.put(database, dataSource);
            }

            logger.info("CONNECTIONS POOL INITIALIZED [@" + connectionData.getHost() + "]");
        }
    }

public Connection getConnection(Database database)
        throws SQLException, FileNotFoundException, ReaderException, ClassNotFoundException
{
    Connection connection = null;
    BasicDataSource dataSource = dataSources.get(database);

    logger.info("Getting " + database + " database connection");

    connection = dataSource.getConnection();

    logger.info("Connected to " + database + " database");

    return connection;
}

Спасибо!

0 ответов

Другие вопросы по тегам