운영중인 프로세스에 대한 주기적인 모니터링 및 알림을 위해 개발
데이터베이스 연동
알림 연동
project.name=taskScheduler
server.port=11011
#Use Flag
smtp.use.flag=y
kakao.use.flag=y
#Schedule
# 5분마다
batch.5min.crond=0 */5 * * * ?
# 30분마다
batch.halfHours.crond=0 */30 * * * ?
# 업무시간 30분마다
batch.workHalfHours.crond=0 */30 9-18/1 * * ?
# 업무시간 1시간 마다
batch.workHours.crond=0 0 9-18/1 * * ?
# 아침 아홉시에 한 번
batch.morning.oneOff.crond=0 0 9 * * ?
# 오전 07:40 - 09:40 분까지 1시간마다
batch.morning.crond=0 40 7-9/1 * * ?
@CrossOrigin("*")
@EnableAutoConfiguration
application.properties
에서 설정한 Schedule
를 호출.
${batch.5min.crond}
import javax.mail.MessagingException;
import java.io.UnsupportedEncodingException;
@Slf4j
@CrossOrigin("*")
@EnableAutoConfiguration
@RestController
public class BatchController {
@Autowired
private BatchService batchService;
@Autowired
private ManagerMapper managerMapper;
//HINT: workDayCheck() - Oracle DB 기준으로 작업일(오늘)이 영업일이면 진행
/**
* 스케쥴러
* 1. 매일 00 시 00 분 05초에 조건에 따라 충전하는 스케쥴러
* 1: 초(0-59)
* 2: 분(0-59)
* 3: 시(0-23)
* 4: 일(1-31)
* 5: 월(1-12)
* 6: 요일(0-7) 0, 7 : 일요일 / 1: 월요일 / 6:토요일
* */
@Scheduled(cron="${batch.5min.crond}") // 5분마다
public void t5minCheck() throws UnsupportedEncodingException, MessagingException {
log.info("Path: {}", Util.pathUtils().methodName());
log.info("[{}]",Util.dateUtils().now());
batchService.processAliveCheck();
}
@Scheduled(cron="${batch.halfHours.crond}") // 30분마다
public void halfHoursCheck() throws UnsupportedEncodingException, MessagingException {
log.info("Path: {}", Util.pathUtils().methodName());
log.info("[{}]",Util.dateUtils().now());
if(workDayCheck()){
}
}
@Scheduled(cron="${batch.workHours.crond}") // 1시간마다(영업일)
public void workHoursCheck(){
log.info("Path: {}", Util.pathUtils().methodName());
log.info("[{}]",Util.dateUtils().now());
if(workDayCheck()){
}
}
@Scheduled(cron="${batch.morning.crond}") // 07시 40분 부터 09시 40분까지 1시간 간격(영업일)
public void halfOf7to9Check() throws UnsupportedEncodingException, MessagingException {
log.info("Path: {}", Util.pathUtils().methodName());
log.info("[{}]",Util.dateUtils().now());
if(workDayCheck()){
}
}
@Scheduled(cron="${batch.workHalfHours.crond}") // 9시부터 30분마다(영업일)
public void workHalfHoursCheck() throws UnsupportedEncodingException, MessagingException {
log.info("Path: {}", Util.pathUtils().methodName());
log.info("[{}]",Util.dateUtils().now());
if(workDayCheck()){
}
}
@Scheduled(cron="${batch.morning.oneOff.crond}") // 아침 9시 한 번
public void oneOffOnMorning() throws UnsupportedEncodingException, MessagingException {
log.info("Path: {}", Util.pathUtils().methodName());
log.info("[{}]",Util.dateUtils().now());
if(workDayCheck()){
}
}
private boolean workDayCheck(){
return managerMapper.workDayCheck() == 1 ? true : false;
}
}
아래와 같은
비동기
처리를 진행할 수 있다.
DevOps
를 위해 스케줄러
주기에 맞추어 시스템 리포트
를 발송하도록 하였다.
SMTP
와 약간의 Linux CMD
를 조합하여 운영에서 사용중이다.
이렇게 누적된 데이터는 모니터링
을 위해 차트
또는 그리드
를 그려