programing

스프링 부트 내의 /info 엔드포인트에 프로그래밍 방식으로 추가하는 방법은 무엇입니까?

codeshow 2023. 3. 23. 22:59
반응형

스프링 부트 내의 /info 엔드포인트에 프로그래밍 방식으로 추가하는 방법은 무엇입니까?

에 추가하는 방법/infoSpring Boot의 엔드포인트를 프로그래밍 방식으로 사용할 수 있습니까? 매뉴얼에서는 이것이 다음 경우에 가능한 것으로 기술되어 있습니다./health사용을 통한 엔드포인트HealthIndicator인터페이스입니다.뭐 필요한 거라도 있어?/info엔드포인트도?

운영체제 이름과 버전, 기타 런타임 정보를 추가하고 싶습니다.

Spring Boot 1.4 에서는, 다음과 같이 선언할 수 있습니다.InfoContributer콩을 사용하면 훨씬 쉬워집니다.

@Component
public class ExampleInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("example",
                Collections.singletonMap("key", "value"));
    }

}

자세한 내용은 http://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/ #production-ready-application-info-custom을 참조하십시오.

승인된 답변은 실제로 InfoEndpoint를 클로빙하고 추가하지 않습니다.

정보에 추가할 수 있는 한 가지 방법은@Configuration클래스, 추가@Autowired다음에 추가 속성을 추가하는 메서드info.*환경에 대한 관습.그리고나서InfoEndpoint호출되면 픽업합니다.

다음과 같은 작업을 수행할 수 있습니다.

@Autowired
public void setInfoProperties(ConfigurableEnvironment env) {
    /* These properties will show up in the Spring Boot Actuator /info endpoint */
    Properties props = new Properties();

    props.put("info.timeZone", ZoneId.systemDefault().toString());

    env.getPropertySources().addFirst(new PropertiesPropertySource("extra-info-props", props));
}

원하는 작업을 수행하는 한 가지 방법(전체 커스텀속성을 표시할 필요가 있는 경우)은 기본값보다 우선하는 InfoEndpoint 유형의 빈을 선언하는 것입니다.

@Bean
public InfoEndpoint infoEndpoint() {
     final LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
     map.put("test", "value"); //put whatever other values you need here
     return new InfoEndpoint(map);
}

위의 코드에서 알 수 있듯이 지도에는 필요한 정보가 모두 포함될 수 있습니다.

표시할 데이터가 사용자 지정이 아닌 환경에서 검색할 수 있는 경우에는 이 데이터를 재정의할 필요가 없습니다.InfoEndpointbean. 단, 속성 파일에 속성을 추가하는 것만으로 프리픽스는 다음과 같습니다.infoOS명을 평가하는 예를 다음에 나타냅니다.

info.os = ${os.name}

위의 코드에서는 Spring Boot에 의해 오른쪽 표현식이 평가된 후,/info엔드 포인트

마지막 주의사항으로 이미 많은 환경정보를 입수할 수 있습니다./env엔드 포인트

갱신하다

@shabinjo에서 지적했듯이 새로운 Spring Boot 버전에는 없습니다.InfoEndpoint맵을 받아들이는 컨스트럭터.다만, 다음의 스니펫을 사용할 수 있습니다.

@Bean
public InfoEndpoint infoEndpoint() {
     final Map<String, Object> map = new LinkedHashMap<String, Object>();
     map.put("test", "value"); //put whatever other values you need here
     return new InfoEndpoint(new MapInfoContributor(map));
}

위의 코드에 의해 디폴트 정보가 완전히 덮어쓰게 되어, 최종적으로는/info이 문제를 해결하려면 다음 bean을 추가할 수 있습니다.

@Bean
public MapInfoContributor mapInfoContributor() {
    return new MapInfoContributor(new HashMap<String, Object>() {{
        put("test", "value");
    }});
}

커스텀 정보를 추가하려면 ApplicationListener 내에 커스텀 PropertySource를 추가할 수 있어야 합니다.* 환경에 대한 속성(예에 대해서는 다음 답변 참조)Spring-boot application.properties를 프로그래밍 방식으로 덮어쓰는 방법)

언급URL : https://stackoverflow.com/questions/23863972/how-do-i-add-things-to-the-info-endpoint-in-spring-boot-programmatically

반응형