package itn.let.mjo.scheduler.service; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.sym.log.lgm.service.EgovSysLogService; /** * 과거 테이블 데이터 백업 스케쥴링 클래스 * @author 공통서비스개발팀 이삼섭 * @since 2009.03.11 * @version 1.0 * @see * *
 * << 개정이력(Modification Information) >>
 *   
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2009.03.11  이삼섭          최초 생성
 *   2011.07.01  이기하          패키지 분리(sym.log -> sym.log.lgm)
 *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
 *
 * 
*/ @Service("tableBackupMsgScheduling") public class TableBackupMsgScheduling{ @Resource(name="EgovSysLogService") private EgovSysLogService sysLogService; @Resource(name="mjonMsgDataBackupService") private MjonMsgDataBackupService mjonMsgDataBackupService; /** 설정값 가져오기 */ @Value("#{globalSettings['Globals.Env']}") private String GlobalsEnv; /** * mj_msg_data 테이블 과거 데이터 백업 * insert or update 처리 * @param * @return * @throws Exception */ public void mjMsgDataBackup() throws Exception { /* * step0.대상 테이블 명 가져오기 ex)mj_msg_data_backup_2022 * * step1.작년 데이터 테이블이 있는지 확인 ex)mj_msg_data_backup_2022 * 없으면 생성 * step2.작년 데이터를 작년 테이블로 이전 * delete and insert * step3.제작년 데이터를 원본 테이블에서 삭제 * ex)delete mj_msg_data(3년 이상 데이터 삭제) * 2023년인 경우 2020년 데이터 삭제 * * * new 2023-03-22 * step0.대상 테이블 명 가져오기 ex)mj_msg_data_backup_2022 * * step1.대상 테이블 drop ex)drop table mj_msg_data_backup_2022 * * step2.대상 테이블 생성 ex)create table mj_msg_data_backup_2022 LIKE mj_msg_data * * step3.대상 데이터 이전 ex)insert into table mj_msg_data_backup_2022 select * from mj_msg_data * * step4.이전 데이터를 원본 테이블에서 삭제 * ex)delete mj_msg_data(3년 이상 데이터 삭제) * 2023년인 경우 2020년12월31일을 포함한 이전 데이터 삭제 * * */ System.out.println("=============TableBackupMsgScheduling=============mjMsgDataBackup()=============="); try { System.out.println("=============this is =============>"+GlobalsEnv); if(!GlobalsEnv.equals("local")) {//local에서 실행 안되도록 처리 System.out.println("=============DO ============="); MjonMsgVO mjonMsgVO = new MjonMsgVO(); //step0.대상 테이블 명 가져오기 ex)mj_msg_data_2022 //step1.대상 테이블 drop ex)drop table mj_msg_data_backup_2022 //step2.대상 테이블 생성 ex)create table mj_msg_data_backup_2022 LIKE mj_msg_data //step3.대상 데이터 이전 ex)insert into table mj_msg_data_backup_2022 select * from mj_msg_data //step4.이전 데이터를 원본 테이블에서 삭제 try { //step0.대상 테이블 명 가져오기 ex)mj_msg_data_2022 // 0.1초 mjonMsgVO = mjonMsgDataBackupService.selectBackupTableName(mjonMsgVO); //mjonMsgVO = mjonMsgDataBackupService.selectBackupTable(mjonMsgVO); //mjonMsgDataBackupService.selectBackupTable(mjonMsgVO); //step1.대상 테이블 drop ex)drop table mj_msg_data_backup_2022 // mjonMsgDataBackupService.deleteDropTable(mjonMsgVO); }catch(Exception ex) { ex.printStackTrace(); } try { //mjonMsgVO = mjonMsgDataBackupService.selectBackupTable(mjonMsgVO); //mjonMsgDataBackupService.selectBackupTable(mjonMsgVO); //step2.대상 테이블 생성 ex)create table mj_msg_data_backup_2022 LIKE mj_msg_data mjonMsgDataBackupService.insertCreateTableWithTableCopy(mjonMsgVO); //step3.대상 데이터 이전 ex)insert into table mj_msg_data_backup_2022 select * from mj_msg_data // truncate // row 4,457,123 // delete time 0.625초 // cpu 20%~63% // insert // row 4,457,123 // insert time 400초(780초)-15분 소요 // cpu 23%~50% mjonMsgDataBackupService.deleteNinsertToBackupTable(mjonMsgVO); //step4.이전 데이터를 원본 테이블에서 삭제 //* ex)delete mj_msg_data(3년 이상 데이터 삭제) //* 2023년인 경우 2020년12월31일을 포함한 이전 데이터 삭제 // // DATE_FORMAT(sent_date,'%Y')>#rsltDate# // 빈데이터 삭제도 400초 // // mj_msg_data_backup_2022 테이블에서 조건으로 삭제시 // 실제 4,457,123건 삭제시 2464초(41분) // 일단위로 나눠서 삭제 365*10(초)=3650초-1시간소요 // String s_year = ""; String s_month = ""; String s_day = ""; String s_date = ""; s_year = mjonMsgVO.getRsltDate(); for (int i=1;i<13;i++) { //월 if (i<10) { s_month = "0" + Integer.toString(i); }else { s_month = Integer.toString(i); } System.out.println(s_year+s_month+"====================="); for (int j=1;j<32;j++) { //일 if (j<10) { s_day = "0" + Integer.toString(j); }else { s_day = Integer.toString(j); } s_date = s_year + s_month + s_day; System.out.println(s_date); mjonMsgVO.setRsltDate(s_date); mjonMsgDataBackupService.deleteToOriginTableWithDay(mjonMsgVO); } } //mjonMsgVO.setRsltDate(s_date); //mjonMsgDataBackupService.deleteToOriginTable(mjonMsgVO); //step0.시간 체크용 mjonMsgVO = mjonMsgDataBackupService.selectBackupTableName(mjonMsgVO); }catch(Exception ex) { ex.printStackTrace(); } }else { System.out.println("=============skipped!!! ============="); } // do something... }catch(Exception ex) { ex.printStackTrace(); } } }