【发布时间】:2019-08-27 09:22:07
【问题描述】:
您好,我想流式传输一个非常大的表 spring-data-jdbc。以此目的 我已将连接设置为 READ_ONLY 我已在我的存储库中声明了一个方法,该方法如下所示:
PackageRepository extends Repository<Package,String> {
Stream<Package> findAll();
}
我的期望是结果集的类型为 FORWARD_ONLY,并且在从数据库中收到所有结果之前,此方法不会无限期地阻塞。
在这里,我将与 Spring Data JPA 进行比较,其中 Stream 方法没有阻塞,并且根据获取大小分部分获取数据库的内容。
我错过了一些配置吗?如何使用 spring-data-jdbc 实现这种行为?
更新:我将以不同的形式提出问题。如何使用 spring-data-jdbs 实现相当于:
template.query(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement statement = con.prepareStatement("select * from MYTABLE with UR",ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchSize(150000);
return statement;
}
}, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
// do my processing here
}
});
【问题讨论】:
-
从源代码来看,似乎还不支持游标。我注意到对于 MyBatisDataAccessStrategy 中的 findAll 方法,它已经使用了 sqlSession().selectList() 不应该在这里使用游标吗? SqlSession.selectCursor ?
-
我想我明白了,基本上我需要定义我自己的DefaultDataAccessStrategy。如果我做对了。
-
你说得对,这还不支持,但我喜欢这个主意。我看到你已经创建了一张票:jira.spring.io/browse/DATAJDBC-356 谢谢。
-
我开始着手解决这个问题,并在 Jira 问题上添加了一些 cmets。
标签: java jdbc spring-data persistence spring-data-jdbc