엑셀 다운로드 공통 서비스 가이드
필수 셋팅
엑셀 다운로드시 추가 설정 사항을 적용하여 엑셀 다운로드를 할 수 있다
옵션 설정
옵션설정을 하지 않으면 모두 default
값으로 설정 된다header
, fileName
은 설정을 해주는 것이 좋다
설정가능한 옵션
title
: 엑셀 제목 (default: 제목없음)header
: 엑셀 헤더 (default: 조회된 컬럼명으로 헤더를 자동 생성함)fileName
: 엑셀 파일명 (default: export.xlsx)columnWidth
: 엑셀 컬럼 기본간격 설정값 엑셀 간격 폭을 넓힐때 설정 (default: 3000)style
: 기본적인 테두리 설정과 font 설정이 추가된다 다운로드시 속도가 저하된다 (default: false)autoSize
: 자동으로 컬럼을 리사이징 한다 (default: false)
package com.iparking.component.excel.domain;
import lombok.*;
/**
* 엑셀 다운로드 확장 도메인
* Created by KMS on 04/09/2019.
*/
@Getter
@Setter
@EqualsAndHashCode
@NoArgsConstructor
@ToString
public class ReqExcelDownload {
/* 엑셀 제목 */
private String title;
/* 엑셀 Header */
private String[] header = new String[]{};
/* 엑셀 fileName */
private String fileName;
/* 엑셀 컬럼 사이즈(지정하지 않으면 기본 사이즈(3000)가 지정된다) */
private Integer columnWidth;
/* 스타일 여부 기본 false */
private boolean style = false;
/* 오토 컬럼 리사이징 사용 여부 기본 false */
private boolean autoSize = false;
@Builder
public ReqExcelDownload(String title, String[] header, String fileName, Integer columnWidth, boolean style, boolean autoSize) {
this.title = title;
this.header = header;
this.fileName = fileName;
this.columnWidth = columnWidth;
this.style = style;
this.autoSize = autoSize;
}
}
사용법
엑셀 다운로드 서비스 사용시 엑셀 다운로드를 사용할 서비스에서 ExcelService
를 의존성을 주입 받고download
메서드만 호출해서 List<Object>
또는 List<Map>
원하는 형태의 매개변수를 전달하여 사용
- 엑셀 다운로드 서비스의 리턴 타입은
ModelAndView
로 설정 header
와fileName
을 설정하고excelService.download
를 호출
null
데이터 처리
조회된 데이터가 null
인 경우 빈 excel 파일을 export.xlsx
로 리턴해주므로 별도의 null
처리를 할 필요가 없다
@Service
@RequiredArgsConstructor
public class ContractService {
private final ContractRepository dao ;
private final ExcelService excelService;
public ModelAndView getAllianceParkExcel(ReqAlliancePark reqAlliancePark, Paging paging) {
// 검색 조건으로 데이터 전체 검색
List<AllianceParkDto> contractList = dao.contractList(reqAlliancePark, paging);
return excelService.download(contractList,
ReqExcelDownload.builder()
.header(new String[]{"식별키", "프로젝트코드", "주차장계약명", "주차장수", "지역", "표준계약여부", "운영사", "영업담당자", "정산담당자", "계약일", "오픈일", "출고상태", "수정자", "수정일"})
.fileName("제휴주차장리스트_"+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
.build()
);
}
}
ExcelService
공통 엑셀 다운로드 서비스는 향상된 SXSSF 방식으로 엑셀 다운로드 서비스를 제공한다
별도의 flush 설정은 하지 않고 기본값을 사용한다
안정성: 30만건의 데이터까지 테스트 완료
SXSSF : XSSF의 Streaming Version으로 메모리를 적게 사용하여 대용량 엑셀 다운로드에 주로 사용되는 방식
SXSSF 방식 -> 생성자 방식에서의 기본 flush 크기는 100 이며, -1 지정시 무제한이다. 쓰기전용이며 읽기는 불가능하다
공통 엑셀 다운로드 서비스는 Object
와 Map
형태를 모두 지원한다
엑셀 다운로드 서비스 사용시 엑셀 다운로드를 사용할 서비스에서 ExcelService
를 의존성을 주입 받고 download
메서드만 호출해서List<Object>
또는 List<Map>
원하는 형태의 매개변수를 전달하여 사용하면 된다
소스코드
package com.iparking.component.excel.service;
import com.iparking.component.excel.domain.ReqExcelDownload;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
import static com.iparking.component.excel.constant.ExcelConstant.EXCEL_XLSX_STREAMING_VIEW;
/**
* Created by KMS on 09/09/2019.
* 엑셀 서비스
*/
@Slf4j
@Service
public class ExcelService {
final ExcelConverter excelConverter;
public ExcelService(ExcelConverter excelConverter) {
this.excelConverter = excelConverter;
}
/**
* 엑셀 다운로드 서비스
* Map 이나 객체 형태로 받아서 엑셀 파일로 만들어 리턴함
* 엑셀 다운로드 서비스를 이용하기 위해서 요청 파라메터는
* @param list
* @param <T>
* @return
*/
public <T> ModelAndView download(List<T> list) {
return new ModelAndView(EXCEL_XLSX_STREAMING_VIEW, excelConverter.convertList(list));
}
/**
* 엑셀 다운로드 서비스
* Map 이나 객체 형태로 받아서 엑셀 파일로 만들어 리턴함
* 엑셀 다운로드 서비스를 이용하기 위해서 요청 파라메터는
* ReqExcelDownload 엑셀 객체 파라메터로 전달해야함
* @param list
* @param <T> 엑셀 변환 데이터
* @param <E extends ReqExcelDownload> 엑셀 파라메터
* @return
*/
public <T, E extends ReqExcelDownload> ModelAndView download(List<T> list, E req) {
return new ModelAndView(EXCEL_XLSX_STREAMING_VIEW, excelConverter.convertList(list, req));
}
}
'프로젝트' 카테고리의 다른 글
[SpringBoot package] 패키지 객체 도메인 가이드 (0) | 2020.06.20 |
---|---|
[SpringBoot 에러알람] Application Logback 파일에 연동 URL 적용하기 (0) | 2020.06.20 |
[SpringBoot Excel] 엑셀 업로드 공통 서비스 가이드 (0) | 2020.06.20 |
[SpringBoot jooq] SQL UNQUOTED 설정 (0) | 2020.06.20 |
[SpringBoot jooq] generator database 설정 옵션 (0) | 2020.06.20 |
댓글