Мне нужно реализовать общую службу доступа к базе данных, все обращения к базам данных других бизнес-систем будут выполняться через службу, но не ожидается, что они будут разделены на этапе разработки (да, мне также интересно, почему этоcase), поэтому подумайте о следующей реализации:
Реализация Execution service
, которая поддерживает пул соединений (используйте HikariCP) и состояние соединения в пуле.
Реализация DataSource module
, она будет проксировать все методы java.sql.Connection
, java.sql.Statement
, java.sql.PreparedStatement
, java.sql.CallableStatement
, java.sql.ResultSet
, использовать RPC для переадресации вызова (метод, параметры, уникальный идентификатор) для Execution service
, этот идентификатор является глобально уникальным, принимая UUID.
После получения вызова Execution service
он находит соответствующий java.sql.Connection
в соответствии сЯ бы.Если это не так, он получает java.sql.Connection
из пула соединений и помечает соединение как using
, его нельзя использовать другим вызовам, если его состояние using
.
business system
разработан обычным способом (Spring Data JPA), но источник данных необходимо изменить на DataSource module
.
Для java.sql.Connection
при использовании сохраняйте свои java.sql.Statement
, java.sql.PreparedStatement
, java.sql.CallableStatement
, java.sql.ResultSet
до тех пор, пока не будет вызван close
, вызов close освободит ресурсы, кроме java.sql.Connection
, вернет java.sql.Connection
в пул соединений.
Одна проблема, о которой я могу подумать, заключается в следующем: java.sql.ResultSet
может загружаться с отложенной загрузкой, что означает, что запросу может потребоваться несколько раз получить набор результатов из Execution service
.
Все business systems
имеют доступ только к одной и той же базе данных (разделение чтения / записи, но может быть Oracle, MySQL или PostgreSQL), поэтому я лично считаю, что решение теоретически выполнимо и не особенно сложно, но яЯ обеспокоен некоторыми серьезными проблемами, о которых я не знаю, поэтому я хотел бы спроситьВы, чтобы помочь проанализировать, большое спасибо!