Intégration de Ratpack avec Spring Boot

Intégration de Ratpack avec Spring Boot

1. Vue d'ensemble

Auparavant, nous avons introduitRatpack et sesintegration with Google Guice.

Dans cet article rapide, nous allons montrer comment Ratpack peut être intégré à Spring Boot.

2. Dépendance Maven

Avant de continuer, ajoutons la dépendance suivante dans nospom.xml:


    io.ratpack
    ratpack-spring-boot-starter
    1.4.6
    pom

La dépendance pomratpack-spring-boot-starter ajoute automatiquementratpack-spring-boot etspring-boot-starter dans nos dépendances.

3. Intégration de Ratpack avec Spring Boot

Nous pouvons intégrer Ratpack à Spring Boot comme alternative aux conteneurs de servlets fournis par Tomcat ou Undertow. Il suffit d'annoter une classe de configuration Spring avec@EnableRatpack et de déclarer des beans de typeAction<Chain>:

@SpringBootApplication
@EnableRatpack
public class EmbedRatpackApp {

    @Autowired
    private Content content;

    @Autowired
    private ArticleList list;

    @Bean
    public Action home() {
        return chain -> chain.get(ctx -> ctx.render(content.body()));
    }

    public static void main(String[] args) {
        SpringApplication.run(EmbedRatpackApp.class, args);
    }
}

Pour ceux qui sont plus familiers avec Spring Boot, lesAction<Chain> peuvent agir comme un filtre Web et / ou un contrôleur.

Quand il s'agit de servir des fichiers statiques, Ratpack enregistre automatiquement les gestionnaires pour les ressources statiques sous/public et/static dans les @AutowiredChainConfigurers.

Cependant, lescurrent implementation de cette «magie» dépendent des paramètres de notre projet et de l'environnement de développement. Donc, si nous voulons obtenir un service stable de ressources statiques dans différents environnements, nous devons spécifier lesbaseDir explicitement:

@Bean
public ServerConfig ratpackServerConfig() {
    return ServerConfig
      .builder()
      .findBaseDir("static")
      .build();
}

Le code ci-dessus suppose que nous avons un dossierstatic sous classpath. De plus, nous nommons le beanServerConfig enratpackServerConfig pour remplacer le bean par défaut enregistré dansRatpackConfiguration.

Ensuite, nous pouvons tester notre application avecratpack-test:

MainClassApplicationUnderTest appUnderTest
  = new MainClassApplicationUnderTest(EmbedRatpackApp.class);

@Test
public void whenSayHello_thenGotWelcomeMessage() {
    assertEquals("hello example!", appUnderTest
      .getHttpClient()
      .getText("/hello"));
}

@Test
public void whenRequestList_thenGotArticles()  {
    assertEquals(3, appUnderTest
      .getHttpClient()
      .getText("/list")
      .split(",").length);
}

@Test
public void whenRequestStaticResource_thenGotStaticContent() {
    assertThat(appUnderTest
      .getHttpClient()
      .getText("/"), containsString("page is static"));
}

4. Intégration de Spring Boot avec Ratpack

Tout d'abord, nous allons enregistrer les beans requis dans une classe de configuration Spring:

@Configuration
public class Config {

    @Bean
    public Content content() {
        return () -> "hello example!";
    }
}

Ensuite, nous pouvons créer un registre facilement en utilisant la méthode pratiquespring(…) fournie parratpack-spring-boot:

public class EmbedSpringBootApp {

    public static void main(String[] args) throws Exception {
        RatpackServer.start(server -> server
          .registry(spring(Config.class))
          .handlers(chain -> chain.get(ctx -> ctx.render(ctx
            .get(Content.class)
            .body()))));
    }
}

Dans Ratpack, les registres sont utilisés pour la communication entre gestionnaires lors du traitement des demandes. L'objetContext que nous utilisons dans les gestionnaires implémente l'interfaceRegistry.

Ici, une instanceListableBeanFactory fournie par Spring Boot est adaptée à unRegistry, pour sauvegarder le registre dansHandler´sContext. Ainsi, lorsque nous voulons obtenir un objet d'un type spécifique à partir deContext, lesListableBeanFactory seront utilisés pour rechercher les beans correspondants.

5. Sommaire

Dans ce tutoriel, nous avons exploré comment intégrer Spring Boot et Ratpack.

Comme toujours, l'implémentation complète est disponibleover on Github.