java - starter - Actuador de arranque por resorte sin arranque de resorte
spring boot wiki (6)
Aunque la respuesta ya está aceptada, pensé en actualizar mi experiencia. No quería convertir mi aplicación al arranque de primavera con @SpringBootApplication
. Consulte otra pregunta donde mencioné el código mínimo requerido.
He estado trabajando en una aplicación Spring / Spring MVC y estoy buscando agregar métricas de rendimiento. Me he encontrado con Spring Boot Actuator y parece una gran solución. Sin embargo, mi aplicación no es una aplicación Spring Boot. Mi aplicación se ejecuta en un contenedor tradicional Tomcat 8.
Agregué las siguientes dependencias
// Spring Actuator
compile "org.springframework.boot:spring-boot-starter-actuator:1.2.3.RELEASE"
Creé la siguiente clase de configuración.
@EnableConfigurationProperties
@Configuration
@EnableAutoConfiguration
@Profile(value = {"dev", "test"})
@Import(EndpointAutoConfiguration.class)
public class SpringActuatorConfig {
}
Incluso llegué a agregar @EnableConfigurationProperties en cada clase de configuración como se sugiere en otra publicación en StackOverflow. Sin embargo, eso no hizo nada. Los puntos finales todavía no se están creando y devuelven 404s.
Aunque no es una buena idea usar las características de Spring Boot sin Spring Boot, ¡es posible!
Por ejemplo, esta configuración de Java hace que Spring Boot Actuator Metrics esté disponible sin usar Spring Boot:
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);
}
}
La dependencia de Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
Puede usar el actuador sin arranque de resorte. Agrega esto a 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>
Y luego en tu clase de configuración
@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);
}
}
Y luego puedes ver las métricas en tu aplicación
Tendrá que convertir su aplicación a Spring Boot si desea usar los componentes que se conectan. Hay una sección llamada Convertir una aplicación existente a Spring Boot bajo los documentos Spring Boot que deseará revisar. No he hecho esto por mi cuenta, pero utilizo Spring Boot y es relativamente sencillo de configurar, así que espero que puedas obtenerlo aquí.
cometió el error al no introducir la anotación @springboot en su código. Cuando agrega @springboot, el compilador considerará automáticamente como programa de arranque y agregará el archivo de dependencia requerido para él y su archivo de dependencia del actuador.
Primero, aclaremos que no puede usar el Actuador de arranque de resorte sin usar Spring Boot.
Estaba equivocado sobre no poder hacerlo sin Spring Boot. Consulte la respuesta de @ stefaan-neyts para ver un ejemplo de cómo hacerlo.
Creé un proyecto de muestra para mostrar cómo se puede convertir una aplicación SpringMVC básica utilizando una cantidad mínima de autoconfiguración de Spring Boot.
Fuente original: http://www.mkyong.com/spring-mvc/gradle-spring-mvc-web-project-example
Fuente convertida: https://github.com/Pytry/minimal-boot-actuator
Podría haber eliminado por completo los archivos dispatcher-servlet.xml y web.xml, pero los mantuve para mostrar cómo realizar un cambio mínimo posible y para simplificar la conversión de proyectos más complejos.
Aquí hay una lista de pasos que tomé para convertir.
Proceso de conversión
- Agregue un archivo de configuración de Java anotado con @SpringBootApplication
- Agregue el archivo de configuración de la aplicación como un bean a la configuración xml tradicional (se agregó justo después del análisis de contexto).
Mueva los resolvedores de vista a la configuración de aplicación java.
Alternativamente, agregue el prefijo y el sufijo a application.properties. A continuación, puede inyectarlos con @Value en su aplicación, o eliminarlos por completo y simplemente usar la resolución de vista de arranque de primavera proporcionada. Fui con el primero.
Se eliminó el detector de contexto predeterminado del contexto de primavera xml.
¡Esto es importante! Como el arranque de primavera proporcionará uno, obtendrá una excepción de "Error listener Start" si no lo hace.
Agregue el complemento de arranque de primavera a sus dependencias de script de compilación (yo estaba usando gradle)
Agregue una propiedad mainClassName al archivo de compilación y establezca una Cadena vacía (indica que no se debe crear un ejecutable).
Modificar las dependencias para el actuador de arranque por resorte