#java #post&resql #slick #akka-stream #alpakka
#java #post&resql #slick #akka-stream #alpakka
Вопрос:
Я пытаюсь передавать результаты запроса с использованием Slick в Java-приложении, используя Akka Streams и Post&res:
Source mySource = Slick.source(
slickSession,
"SELECT * from messa&e where started_instant is null",
(this::createQueueItemFromSlickRow));
В документации Slick ясно, что для потоковой передачи с Post&res необходимо установить дополнительные параметры. Однако я могу найти только примеры Scala, а в документации Alpakka нет информации о том, как это настроить.
Как бы то ни было, я не могу обрабатывать какие-либо новые объекты, которые поступают в базу данных после запуска потока.
Ответ №1:
Как вы заявили, в документации Slick отмечается следующее:
Примечание: Некоторые системы баз данных могут требовать, чтобы параметры сеанса были установлены определенным образом для поддержки потоковой передачи без одновременного кэширования всех данных в памяти на стороне клиента. Например, Post&reSQL требует как
.withStatementParameters(rsType = ResultSetType.ForwardOnly, rsConcurrency = ResultSetConcurrency.ReadOnly, fetchSize = n)
(с желаемым размером страницыn
), так и.transactionally
для правильной потоковой передачи.
1 PreparedStatement
Служба поддержки Alpakka Slick недавно представила в своем Java DSL, который вы можете использовать для установки вышеупомянутых параметров, если вы не можете использовать Scala API. Например:
PreparedStatement statement =
connection.prepareStatement(
"MY SQL STATEMENT",
ResultSet.TYPE_FORWARD_ONLY, // java.sql.ResultSet
ResultSet.CONCUR_READ_ONLY);
Ознакомьтесь с SlickTest.java
классом и приведенным выше запросом на извлечение для получения более подробной информации.
1Это изменение является частью предстоящего выпуска Alpakka 2.0.2. (Версия 2.0.1 является текущим выпуском на момент написания этой статьи.)