2012-09-26 1 views
1

현재 Repostiory, Service, Controller (Spring WebMVC), JacksonJson Mapper가 "view"로 기본 스프링 아키텍처를 가지고 있습니다. 모든 리포지토리/서비스/컨트롤러 메서드는 다음과 같습니다.Spring MVC 및 Spring JdbcTemplate RowCallbackHandler를 사용하고 결과를 스트림하는 방법은 무엇입니까?

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

기본적으로 각 레이어는 데이터를 검색하고 계산을 수행하여 다음 레이어로 반환합니다.

데이터 크기가 늘어남에 따라 Spring JdbcTemplate, 페치 크기 설정 및 RowCallbackHandler를 사용하여 한 번에 모두 가져 오는 대신 데이터베이스 결과를 "스트리밍"했습니다.

내 질문은 다음과 같습니다. "콜백"방식을 저장소 계층뿐만 아니라 모든 계층에 적용하여 모든 결과가 콜백 기능을 통해 콜렉션으로 반환하도록 할 수 있습니까? SpringMVC 뷰와 함께 작동합니까? 난의 사슬로 매인 콜백으로 끝날 거라고 생각 :

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

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

사람이 접근 방식을 경험 했습니까? 기존 패턴 또는 템플릿이 있습니까? 나는 디자인하기가 더 어렵 기 때문에 큰 데이터 크기에 대해서만 이익이 있다고 생각한다.

답변

0

우리가 행 매퍼에서 응답으로 스트리밍하는 데 사용한 유일한 시간은 데이터베이스에 암호화 된 큰 바이너리 데이터를 저장하고있는 그대로의 상태로 스트리밍하여 think 클라이언트가 해독하려고했을 때입니다.

생각한 상황이라고 가정하면 ResultSetExtractor를 사용해야합니다. 콜백의 결과 집합에서 스트림을 가져올 수 있습니다 (데이터 유형이 BLOB 인 경우). 파이프를 응답 출력 스트림으로 파이프하면 repo 메소드의 매개 변수로 사용할 수 있습니다.

각 행을 객체에 매핑하고 콜백 메커니즘이 객체를 하나씩 상위 레이어로 다시 전달해야하는 디자인을 구현하려는 경우 알려 주시기 바랍니다.

관련 문제