eunja511005 / AutoCoding

0 stars 0 forks source link

[중요] 배치잡 관리 체계 구축 #160

Open eunja511005 opened 1 year ago

eunja511005 commented 1 year ago

개요

스케쥴러를 오라클 테이블을 통해서 관리
  - 테이블의 batch_cycle은 분단위 관리
  - 스케쥴러는 1초에 한번씩 수행 
  - 오라클 테이블에서 배치잡의 리스트 조회
  - 이전 시작 시간을 확인해서 수행 되어야할 배치잡만 조회
  - 상태가 Y인 배치잡만 조회
  - 수행 될때는 상태를 S로 변경해서 중복 수행 안되게 하고 작업 종료 되면 다시 Y로 상태 변경
eunja511005 commented 1 year ago
drop table ZTHM_BATCH_MASTER;
CREATE TABLE ZTHM_BATCH_MASTER (
    id VARCHAR2(200),
    batch_name VARCHAR2(255) NOT NULL,
    description VARCHAR2(1000) NOT NULL,
    batch_cycle NUMBER NOT NULL,
    start_date TIMESTAMP(6),
    end_date TIMESTAMP(6),
    status VARCHAR2(50),
    manager VARCHAR2(100),
    log_yn CHAR(1),
    del_yn CHAR(1),
    create_id VARCHAR2(50),
    create_dt TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP,
    update_id VARCHAR2(50),
    update_dt TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT pk_zthm_batch_master PRIMARY KEY (id)
);
eunja511005 commented 1 year ago
@Configuration
public class ThreadPoolConfig {
    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10); // 기본적으로 유지할 스레드 수
        executor.setMaxPoolSize(20); // 최대 스레드 수
        executor.setQueueCapacity(500); // 대기열 크기
        executor.setThreadNamePrefix("MyThreadPool-");
        executor.initialize();
        return executor;
    }
}
eunja511005 commented 1 year ago
@Component
public abstract class BatchWorker implements Runnable{
    @Autowired
    protected BatchMasterService batchMasterService;

    protected BatchMasterDTO batchMasterDTO;

    public void setBatchMasterDTO(BatchMasterDTO batchMasterDTO) {
        this.batchMasterDTO = batchMasterDTO;
    }

    @Override
    public void run() {

        // 배치 수행중 상태로 변경
        batchMasterService.updateBatchMasterInprogress(batchMasterDTO);

        doBatch();

        // 배치 실행 가능 상태로 변경
        batchMasterService.updateBatchMasterReady(batchMasterDTO);

    }

    public abstract void doBatch();

}
eunja511005 commented 1 year ago
@Component
@RequiredArgsConstructor
public class SendMessageBatchWorker extends BatchWorker {

    public void doBatch() {

    }

}