복붙노트

[SPRING] 스프링 부트없는 스프링 부트 액츄에이터

SPRING

스프링 부트없는 스프링 부트 액츄에이터

Spring / Spring MVC 애플리케이션에서 작업 해 왔으며 성능 메트릭을 추가하려고합니다. 스프링 부트 액추에이터를 보았는데 훌륭한 솔루션처럼 보입니다. 그러나 내 응용 프로그램은 스프링 부트 응용 프로그램이 아닙니다. 내 응용 프로그램은 전통적인 컨테이너 Tomcat 8에서 실행됩니다.

다음 종속성을 추가했습니다.

// Spring Actuator
compile "org.springframework.boot:spring-boot-starter-actuator:1.2.3.RELEASE"

다음과 같은 config 클래스를 만들었습니다.

@EnableConfigurationProperties
@Configuration
@EnableAutoConfiguration
@Profile(value = {"dev", "test"})
@Import(EndpointAutoConfiguration.class)
public class SpringActuatorConfig {

}

StackOverflow의 다른 게시물에 제안 된대로 모든 구성 클래스에 @EnableConfigurationProperties를 추가하는 것까지갔습니다. 그러나 그것은 아무 것도하지 않았다. 엔드 포인트는 여전히 작성 중이 아니며 404를 리턴합니다.

해결법

  1. ==============================

    1.스프링 부트없이 액츄에이터를 사용할 수 있습니다. 이것을 pom.xml에 추가하십시오

    스프링 부트없이 액츄에이터를 사용할 수 있습니다. 이것을 pom.xml에 추가하십시오

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator</artifactId>
        <version>1.3.5.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.5.RELEASE</version>
    </dependency>
    

    그런 다음 config 클래스에서

    @Configuration
    @EnableWebMvc
    @Import({
            EndpointAutoConfiguration.class , PublicMetricsAutoConfiguration.class , HealthIndicatorAutoConfiguration.class
    })
    public class MyActuatorConfig {
    
        @Bean
        @Autowired
        public EndpointHandlerMapping endpointHandlerMapping(Collection<? extends MvcEndpoint> endpoints) {
            return new EndpointHandlerMapping(endpoints);
        }
    
        @Bean
        @Autowired
        public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
            return new EndpointMvcAdapter(delegate);
        }
    }
    

    그런 다음 애플리케이션에서 측정 항목을 볼 수 있습니다.

    http : // localhost : 8085 / metrics

  2. ==============================

    2.먼저 Spring Boot를 사용하지 않고 Spring Boot Actuator를 사용할 수 없다는 것을 분명히하자.

    먼저 Spring Boot를 사용하지 않고 Spring Boot Actuator를 사용할 수 없다는 것을 분명히하자.

    나는 Spring Boot 없이는 할 수 없다는 것에 대해 틀 렸습니다. @ stefaan-neyts보기 그것을하는 방법의 예를 들어 답하십시오.

    최소한의 스프링 부트 자동 구성을 사용하여 기본 SpringMVC 애플리케이션을 어떻게 변환 할 수 있는지 보여주는 샘플 프로젝트를 만들었습니다.

    원본 출처 : http://www.mkyong.com/spring-mvc/gradle-spring-mvc-web-project-example

    변환 된 소스 : https://github.com/Pytry/minimal-boot-actuator

    dispatcher-servlet.xml과 web.xml 파일을 완전히 제거 할 수 있었지만 가능한 한 최소한의 변경으로 수행하고 복잡한 프로젝트를 간단하게 변환하는 방법을 보여주었습니다.

    다음은 내가 변환 한 단계 목록입니다.

  3. ==============================

    3.Spring Boot없이 Spring Boot 기능을 사용하는 것은 좋지 않습니다.

    Spring Boot없이 Spring Boot 기능을 사용하는 것은 좋지 않습니다.

    예를 들어,이 Java 구성을 사용하면 Spring Boot를 사용하지 않고 Spring Boot Actuator Metrics를 사용할 수 있습니다.

    import java.util.Collection;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
    import org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration;
    import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
    import org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping;
    import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
    import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    
    @Configuration
    @Import({ EndpointAutoConfiguration.class, PublicMetricsAutoConfiguration.class })
    public class SpringBootActuatorConfig {
    
        @Bean
        @Autowired
        public EndpointHandlerMapping endpointHandlerMapping(Collection<? extends MvcEndpoint> endpoints) {
            return new EndpointHandlerMapping(endpoints);
        }
    
        @Bean
        @Autowired
        public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
            return new EndpointMvcAdapter(delegate);
        }
    }
    

    Maven 의존성 :

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator</artifactId>
        <version>1.3.5.RELEASE</version>
    </dependency>
    
  4. ==============================

    4.대답은 이미 받아 들여졌지만, 나는 내 경험을 업데이트하는 것을 생각했다. @SpringBootApplication을 사용하여 응용 프로그램을 스프링 부팅으로 변환하고 싶지 않았습니다. 필자가 필요한 최소한의 코드에 대해 언급 한 다른 질문을 참조하십시오.

    대답은 이미 받아 들여졌지만, 나는 내 경험을 업데이트하는 것을 생각했다. @SpringBootApplication을 사용하여 응용 프로그램을 스프링 부팅으로 변환하고 싶지 않았습니다. 필자가 필요한 최소한의 코드에 대해 언급 한 다른 질문을 참조하십시오.

  5. ==============================

    5.플러그인 된 컴포넌트를 사용하려면 애플리케이션을 Spring Boot로 변환해야한다. 검토하고 싶은 스프링 부트 문서에서 스프링 부트에 기존 응용 프로그램 변환하기라는 섹션이 있습니다. 나는이 일을 직접하지는 않았지만 Spring Boot를 사용하고 구성하기가 상대적으로 간단하므로 여기에서 얻을 수 있기를 바랍니다.

    플러그인 된 컴포넌트를 사용하려면 애플리케이션을 Spring Boot로 변환해야한다. 검토하고 싶은 스프링 부트 문서에서 스프링 부트에 기존 응용 프로그램 변환하기라는 섹션이 있습니다. 나는이 일을 직접하지는 않았지만 Spring Boot를 사용하고 구성하기가 상대적으로 간단하므로 여기에서 얻을 수 있기를 바랍니다.

  6. ==============================

    6.당신은 당신의 코드에 @springboot 어노테이션을 삽입하지 않음으로써 실수를 저 지르게됩니다. @springboot를 추가하면 컴파일러가 자동으로 부트 프로그램을 고려하고 이에 필요한 의존성 파일과 액추에이터 의존성 파일을 추가합니다

    당신은 당신의 코드에 @springboot 어노테이션을 삽입하지 않음으로써 실수를 저 지르게됩니다. @springboot를 추가하면 컴파일러가 자동으로 부트 프로그램을 고려하고 이에 필요한 의존성 파일과 액추에이터 의존성 파일을 추가합니다

  7. from https://stackoverflow.com/questions/29953157/spring-boot-actuator-without-spring-boot by cc-by-sa and MIT license