File name
Commit message
Commit date
File name
Commit message
Commit date
2024-09-10
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-09-10
2024-09-10
File name
Commit message
Commit date
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
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.11 이삼섭 최초 생성
* 2011.07.01 이기하 패키지 분리(sym.log -> sym.log.lgm)
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
* </pre>
*/
@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();
}
}
}