web-dev-qa-db-fra.com

Actionneur Spring Boot sans Spring Boot

J'ai travaillé sur une application Spring/Spring MVC et je cherche à ajouter des mesures de performances. J'ai rencontré Spring Boot Actuator et cela ressemble à une excellente solution. Cependant, mon application n'est pas une application Spring Boot. Mon application s'exécute dans un conteneur traditionnel Tomcat 8.

J'ai ajouté les dépendances suivantes

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

J'ai créé la classe de configuration suivante.

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

}

Je suis même allé jusqu'à ajouter @EnableConfigurationProperties sur chaque classe de configuration comme suggéré dans un autre post sur StackOverflow. Mais cela n'a rien fait. Les points de terminaison ne sont toujours pas créés et renvoient 404s.

50
greyfox

Vous pouvez utiliser l'actionneur sans soufflet à ressort. Ajoutez ceci à 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>

Et puis dans votre classe de configuration

@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);
    }
}

Et puis vous pouvez voir les métriques dans votre application

http: // localhost: 8085/metrics

Actutaor end point

24
vsingh

Précisons d'abord que vous ne pouvez pas utiliser Spring Boot Actuator sans utiliser Spring Boot.

J'avais tort de ne pas pouvoir le faire sans Spring Boot. Voir la réponse @ stefaan-neyts pour un exemple de la façon de le faire.

J'ai créé un exemple de projet pour montrer comment convertir une application SpringMVC de base en utilisant une quantité minimale de configuration automatique Spring Boot.

Source d'origine: http://www.mkyong.com/spring-mvc/gradle-spring-mvc-web-project-example

Source convertie: https://github.com/Pytry/minimal-boot-actuator

J'aurais pu supprimer complètement les fichiers dispatcher-servlet.xml et web.xml, mais je les ai gardés pour montrer comment effectuer un changement aussi minime que possible et pour simplifier la conversion de projets plus complexes.

Voici une liste des étapes que j'ai prises pour convertir.

Processus de conversion

  • Ajouter un Java annoté avec @SpringBootApplication
  • Ajoutez le fichier de configuration de l'application en tant que bean à la configuration xml traditionnelle (ajouté juste après l'analyse de contexte).
  • Déplacez les résolveurs de vue dans Application Java.

    Vous pouvez également ajouter le préfixe et le suffixe à application.properties. Vous pouvez ensuite leur injecter @Value dans votre application, ou le supprimer entièrement et utiliser simplement le résolveur de vue Spring Boot fourni. Je suis allé avec l'ancien.

  • Écouteur de contexte par défaut supprimé du xml de contexte de printemps.

    C'est important! Étant donné que Spring Boot en fournira une, vous obtiendrez une exception "Error listener Start" si vous ne le faites pas.

  • Ajoutez le plugin Spring Boot à vos dépendances de script de construction (j'utilisais gradle)

  • Ajoutez une propriété mainClassName au fichier de génération et définissez une chaîne vide (indique de ne pas créer d'exécutable).

  • Modifier les dépendances de l'actionneur de la botte à ressort

32
Pytry

Bien que ce ne soit pas une bonne idée d'utiliser les fonctionnalités de Spring Boot sans Spring Boot, c'est possible!

Par exemple, cette configuration Java rend les métriques Spring Boot Actuator disponibles sans utiliser 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 dépendance Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
    <version>1.3.5.RELEASE</version>
</dependency>
14
Stefaan Neyts

Bien que la réponse soit déjà acceptée, j'ai pensé mettre à jour mon expérience. Je ne voulais pas convertir mon application en version Spring à l'aide de @SpringBootApplication. Reportez-vous à ne autre question où j'ai mentionné le code minimum requis.

5
sidgate

Vous devrez convertir votre application en Spring Boot si vous souhaitez utiliser les composants qui s'y connectent. Il y a une section intitulée Convertir une application existante en Spring Boot sous les documents Spring Boot que vous voudrez consulter. Je ne l'ai pas fait moi-même mais j'utilise Spring Boot et il est relativement simple à configurer, donc j'espère que vous pourrez l'obtenir à partir d'ici.

0
Rob Baily