File name
Commit message
Commit date
File name
Commit message
Commit date
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-11-14
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();
}
}
}