1

我目前有一个默认的 Spring 架构:Repostiory、Service、Controller (Spring WebMVC)、JacksonJson Mapper 作为“视图”。我所有的存储库/服务/控制器方法看起来像:

public Collection<Pet> findPetsWithName(String name) {}

所以基本上每个层都会检索数据,进行一些计算并将其返回到下一层。

随着数据大小的增加,我使用 Spring JdbcTemplate、fetchsize 设置和 RowCallbackHandler 来“流式传输”数据库结果,而不是一次获取所有结果。

我现在的问题是:我可以将“回调”方法应用于所有层,不仅是存储库层,以便所有结果都进入回调函数,将它们作为集合返回?它适用于 SpringMVC 视图吗?我想我最终会得到一个链式回调:

RowCallbackHandler(ServiceCallbackHandler(ControllerCallbackHandler(SpringViewHandler(HttpSerlvetResponse))))

public void findPetsWithName(String name, Callback<Pet> callback) {}

有没有人体验过这种方法?是否有现有的模式或模板?我认为只有大数据量才有好处,因为它更难设计。

4

1 回答 1

0

我唯一一次将数据从行映射器流式传输到响应是当我们在数据库中存储大型加密二进制数据并希望按原样流式传输它以由我们的 think 客户端解密时。

假设这是您正在考虑的那种情况,您应该使用 ResultSetExtractor。您可以从回调中的结果集中获取流(假设您的数据类型是 blob 等效的),并将其通过管道传输到响应输出流,该流被接受为您的 repo 方法的参数。

让我知道您是否希望实现一种设计,其中每一行都应映射到一个对象,并且回调机制应将对象逐个传递回更高层。

于 2013-04-19T11:43:08.770 回答