스케줄러를 사용하면 반복적인 업무를 효율적으로 처리할 수 있다.
그래서 이번 포스팅은 Spring 프레임워크에서 Scheduler 기능을 이용해 특정 시간에 slack 메세지 전송하는 방법에 대해 알아본다.
우선 슬랙 메세지를 보낼 코드를 작성을 해야하는데
코드에 대한 설명은 전에 다뤘기 때문에 생략했다.
public class Slack {
public static void sendSlackPost() {
try {
Slack slack = Slack.getInstance();
String token = "";
MethodsClient methods = slack.methods(token);
String str = "";
str+="스케줄러로 특정시간에 메세지 보내기 테스트!!";
ChatPostMessageRequest request = ChatPostMessageRequest.builder()
.channel("")
.text(new Gson().toJson(str))
.build();
ChatPostMessageResponse response = methods.chatPostMessage(request);
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
보낼 내용은 String 변수에 담았고 요청/응답 부분에도 코드를 작성하고 예외 처리해 주었다.
그리고 기본 메서드에서 sendSlackPost()
를 호출한다.
이제 스케줄러 코드를 작성하자
테스트 목적이기 때문에 새로운 클래스를 만들어 간단히 작성했다.
스케줄러를 사용을 위해 어노테이션 @
을 적어준다.
🖋️@Configuration
수동으로 스프링 컨테이너에 빈을 등록하는 어노테이션으로
1개 이상의@Bean
을 제공하는 클래스의 경우 반드시 명시해 주어야
싱글톤이 보장된다.
🖋️@EnableScheduling
xml설정
을 굳이 안해도 스케줄러를 사용할 수 있기 때문에 편리하다.
🖋️@Scheduled
스케줄러 사용을 위한 어노테이션으로 cron을 사용하면
cron="0/10 * * * * ?"
과 같은 설정이 가능하다.
@Configuration
@EnableScheduling //해당 어노테이션을 사용하면 xml설정을 굳이 안해도 스케줄러 실행 가능
public class schedule {
private static SlackScheduler sp; //슬랙에 보낼 메세지 파일을 불러옴
@Scheduled(cron="*/10 * * * * *") ![](https://velog.velcdn.com/images/yujinaa/post/50f6d618-1349-4d4d-8cfb-6c9a360a4060/image.jpg)
public void testSc() {
System.out.println("10초마다 실행");
sp.sendSlackPost(); //불러온 파일의 내용을 호출
}
}
이곳에서 스케줄러를 실행해야 하기 때문에 미리 만들어둔 메세지 코드 파일을 불러온다.
어노테이션을 적고 특정 시간에 전송하기 위해 cron 정규식을 사용해 설정했는데 매 초 % 10을 한 것으로 10초마다 실행하는데
*
는 각 초, 분,시,일,월 을 의미한다.
이제 불러온 파일의 내용을 호출하고 실행한다.
console에서 확인하니 10초마다 메세지가 제대로 출력이 되고 있다.
슬랙에서 확인하니 역시 10초마다 같은 메세지가 정상적으로 보내지는 것을 확인할 수 있다.
이번에는 설정을 다르게해서 테스트 해보자.
@Scheduled(cron="0 5 15 * * TUE")
화요일 오후 3시 5분에 알림 전송되도록 설정했다.
노트북 시간으로 정확환 시간에 알림이 왔는데 slack 시간은 좀 느린지 4분 정도에 왔지만 어쨌든 지정한 시간에 알림 전송 성공! 😀