일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- docker명령어
- 추후정리
- subquery
- 포트
- 서브쿼리
- foreignkey
- 커밋메세지수정
- 메세지수정
- WeNews
- appspec
- appspec.yml
- 테스트
- 네이티브쿼리
- 2 > /dev/null
- AuthenticationEntryPoint
- querydsl
- 검색
- ubuntu
- MySQL
- 적용우선순위
- 메소드명
- 컨테이너실행
- 예약
- EC2
- application.yml
- 테스트메소드
- ㅔㄴ션
- 참조키
- 외부키
- Query
Archives
- Today
- Total
제뉴어리의 모든것
Spring Boot에서 이벤트 사용하기 본문
특정 처리 완료에 대한 이벤트 콜백을 작성해보자
필요 의존성 :
- spring-boot-starter-web
- TestController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
ConnectionService service;
@GetMapping("/connect/{id}")
public void connect(@PathVariable String id) {
System.out.println("연결 시도");
service.connect(id);
}
@GetMapping("/disconnect/{id}")
public void disConnect(@PathVariable String id) {
System.out.println("연결 끊기 시도");
service.disconnect(id);
}
}
예제를 위해 만든 일반적인 컨트롤러다.
/connect/ url 이후에 오는 id란 파라미터가 connect 메소드의 파라미터로 들어온다.
- ConnectionService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
@Service
public class ConnectionService {
@Autowired
ApplicationEventPublisher publisher;
public void connect(String id) {
//connect 처리
publisher.publishEvent(new connected(id));
}
public void disconnect(String id) {
//disconnect 처리
publisher.publishEvent(new disconnected(id));
}
}
일반적인 Service 클래스다.
다만 //connect 처리 부분에서 connect에 대한 처리를 했다 가정하고, ApplicationEventPublisher 변수에
connected란 본인이 만든 임의의 도메인 클래스를 넘겨줘서 Event를 publish(발표) 한다는 개념 정도로 알고있자.
밑에 disconnect 함수는 동일한 개념이지만 disconnected란 이벤트를 발생시킨다는 것만 다르다.
- connected.java
public class connected {
private String id;
public connected(String id) {
this.id = id;
}
public String getID() {
return id;
}
}
이벤트에 대한 도메인 클래스
- disconnected.java
public class disconnected {
private String id;
public disconnected(String id) {
this.id = id;
}
public String getID() {
return id;
}
}
이벤트에 대한 도메인 클래스
- SmsEventHandler.java
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
//EventListener들의 집합
@Component
public class SmsEventHandler {
@EventListener
public void idconnected(connected event) {
System.out.println("접속 완료 콜백");
System.out.println(event.getID() + "님이 접속 하였습니다");
}
@EventListener
public void iddisconnected(disconnected event) {
System.out.println("접속종료 완료 콜백");
System.out.println(event.getID() + "님이 접속을 종료하였습니다");
}
}
EventListener들의 집합 Component 쯤으로 생각하자.
각종 Event에 대한 리스너들이 등록 되어 있는 Component이다.
중요한 점은,
메소드에 @EventListener 애노테이션을 붙이고, 매개변수로 위에서 정의한 "이벤트에 대한 도메인 클래스"(connected, disconnected) 를 파라미터로 정의하면 ConnectionService 객체에서 이벤트를 등록 한것으로 인해 EventListener로 등록된 메소드에 콜백이 발생한다.
*ConnectionService 의 이벤트 등록 부분
publisher.publishEvent(new connected(id));
'Spring Boot' 카테고리의 다른 글
@ModelAttribute 란 (0) | 2021.04.01 |
---|---|
webjars 추가할때 주의사항 (0) | 2021.03.23 |
controller와 dto, html 에서 배열을 주고 받을때 성공 실패 (0) | 2021.03.18 |
Spring Boot 현재 세션 가져오기 (0) | 2021.03.10 |
순수 jpa 페이징 처리 (0) | 2021.02.15 |