728x90
새해에 1월1기점으로 배송 스케쥴 을 변경 을 해야하는 일이 발생 하였다. 당장 배치나 테이블을 수정이나 화면을 붙일 수 없는 상황이라 일회성으로 가능한 방법을 찾아보다 디비 자체에서 특정 시점부터 스케쥴을 돌 수 있는 방법을 찾았다.
이벤트 사용을 위한 설정
2가지 방법이 있다. 스케쥴을 사용 시 영구적으로 적용하는 방법과 디비 재시작 전까지 옵션을 적용하는 방법 나의 경우 1회성으로 진행을 위해 후자를 선택했다 .
영구적용 방법
50-server.cnf에 하단 코드를 추가하고 mariaDB를 다시 시작한다.
event_scheduler = ON
DB 재시작 전까지 적용 하는 방법
SET GLOBAL event_scheduler = ON;
옵션 정상 적용 되었는지 확인
SHOW variables LIKE 'event%';

이벤트 만들기
조건 2023년 1월 1일 부터 적용!
아래는 직접 만들었던 이벤트이다.
CREATE EVENT IF NOT EXISTS auto_logistics_event_dev
ON SCHEDULE
AT '2022-12-23 17:08:00' -- 특정 시간에 1회 실행
ON COMPLETION NOT PRESERVE -- 이벤트 수행 후 삭제여부 (삭제)
ENABLE
COMMENT '배송센터변경 이벤트 개발 테스트'
DO -- 경상남도, 부산, 울산 배송센터 부산으로 변경
UPDATE delivery_auto_logistics_center dalc
, (SELECT srl , group_srl , group_name , address_mgr_no FROM delivery_auto_logistics_center WHERE group_name = '북원주물류센터') dalc2
SET dalc.group_name = dalc2.group_name
, dalc.group_srl = dalc2.group_srl
, dalc.address_mgr_no = dalc2.address_mgr_no
WHERE dalc.group_name ='서원주물류센터';
COMMIT;
END;
CREATE EVENT IF NOT EXISTS delivery_dayofweek_info_dev
ON SCHEDULE
AT '2022-12-26 12:10:00' -- 특정 시간에 1회 실행
ON COMPLETION NOT PRESERVE -- 이벤트 수행 후 삭제여부 (삭제)
ENABLE
COMMENT '지역별 배송스케쥴 이벤트 개발 테스트'
DO -- 원주시 68, 춘천시 72 월 부터 토
UPDATE delivery_dayofweek_info
SET upd_date =NOW()
, mon=1
, tue=1
, wed=1
, thu=1
, fri=1
, sat=1
, rdc_load_sat=1
WHERE city_sn IN(68, 72); -- 화천군 76, 정선군 70 화
UPDATE delivery_dayofweek_info
SET
upd_date =NOW()
, mon=0
, tue=1
, wed=0
, thu=0
, fri=0,
sat=0
, rdc_load_sat=1
WHERE city_sn IN(76, 70); -- 양구군 65, 영월군 67 목
UPDATE delivery_dayofweek_info SET upd_date =NOW()
, mon=0
, tue=0
, wed=0
, thu=1
, fri=0,
sat=0
, rdc_load_sat=1
WHERE city_sn IN(65, 67); -- 평창군 74 화 금
UPDATE delivery_dayofweek_info
SET upd_date =NOW()
, mon=0
, tue=1
, wed=0
, thu=0
, fri=1
, sat=0
, rdc_load_sat=1
WHERE city_sn IN(74); -- 횡성군 77 홍천군 75 월 수 금
UPDATE delivery_dayofweek_info SET upd_date =NOW()
, mon=1
, tue=0
, wed=1
, thu=0
, fri=1, sat=0
, rdc_load_sat=1
WHERE city_sn IN(77,75); -- 상차일 변경 원주 월 -금 -> 월 -토 - 토요일만 추가 -- 서원주 물류센터 사용어부0
UPDATE delivery_center SET is_use = 0 WHERE center_name='서원주물류센터';
COMMIT;
END;
- 수정방법
ALTER EVENT EVENT_TEST
ON SCHEDULE
— 스케쥴 시간
DO
—이벤트
INSERT INTO T_3 ( C_1 ) VALUES ( 'B' )
;
- 삭제
DROP
EVENT
EVENT_TEST;
- 이벤트 조회
SHOW
EVENTS
;
728x90
'코드 > dev' 카테고리의 다른 글
Junit test filtering (2) | 2023.11.17 |
---|---|
비동기처리 시 Spring security 문제 (0) | 2023.11.16 |
저장소에 올라간 브랜치 되돌리기 (2) | 2023.11.15 |
spring AOP & AspectJ (1) | 2023.11.15 |
RestTemplate Get RequestBody 전송 (0) | 2023.11.14 |