如何使用Spring MVC和Spring JdbcTemplate RowCallbackHandler并传输结果?

时间:2012-09-26 10:33:35

标签: java spring rest spring-mvc callback

我目前有一个默认的Spring架构:Repostiory,Service,Controller(Spring WebMVC),JacksonJson Mapper作为“视图”。我的所有Repository / Service / Controller方法如下所示:

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

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

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

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

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

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

有没有人体验过这种方法?是否有现有的模式或模板?我认为大数据尺寸只有一个好处,因为设计起来比较困难。

1 个答案:

答案 0 :(得分:0)

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

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

如果您正在寻求实现一个设计,其中每一行应映射到一个对象,并且回调机制应该将对象逐个传递回更高层,请告诉我。