액추에이터는 개발자의 요구사항에 맞춘 커스텀 기능 설정도 제공
커스텀 방법
앞서 한 방법처럼 application.properties 파일에 내용을 추가하는 것은 많은 내용을 관리할땐 좋지 않음
커스텀 기능 설정 시엔 별도의 구현체 클래스를 작성해서 내용을 추가하는 방법이 많이 활용 됨
액추에이터에서는 InfoContributor 인터페이스 제공
@Component
public class CustomInfoContributor implements InfoContributor {
@Override
public void contribute(Builder builder) {
Map<String, Object> content = new HashMap<>();
content.put("code-info", "InfoContributor 구현체에서 정의한 정보입니다");
builder.withDetail("custom-info-contributor", content);
}
}
구현체로 설정 후 메서드를 오버라이드 하면 기존 앤드포인트 뒤에 넣고자 하는 내용이 추가 된 것을 볼 수 있다
@Endpoint
어노테이션으로 빈에 추가된 객체들은 @ReadOperation, @WriteOperation, @DeleteOpeartion을 통해 커스텀 엔드포인트 노출 가능
애플리케이션에 메모 기록을 남길 수 있는 엔드 포인트 생성
@Component
@Endpoint(id = "note")
public class NoteEndPoint {
private Map<String, Object> noteContent = new HashMap<>();
@ReadOperation
public Map<String, Object> getNote(){
return noteContent;
}
@WriteOperation
public Map<String, Object> writeNote(String key, Object value){
noteContent.put(key,value);
return noteContent;
}
@DeleteOperation
public Map<String, Object> deleteNote(String key){
noteContent.remove(key);
return noteContent;
}
}
@EndPoint 선언하면 액추에이터에 엔드포인트로 자동으로 등록되며 id 속성값으로 경로 정의 가능
@ReadOperation은 HTTP GET 요청에 반응하는 메서드
http://localhost:8080/actuator/note
처음엔 내용을 넣지않아 JSON 형태의 빈 값이 표현 됨
@WriteOpearation은 POST 요청, @DeleteOperation은 DELETE 메서드를 요청함
-> 이를 통해 앤드포인트내 키,값 형태로 입력할 수 있고 제거할수도 있다