Избегайте загрузки метаданных с помощью драйвера 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;
}
Спасибо!