Integração Ratpack com Boot Spring

Integração Ratpack com Boot Spring

1. Visão geral

Anteriormente, introduzimosRatpack e seuintegration with Google Guice.

Neste artigo rápido, mostraremos como o Ratpack pode ser integrado ao Spring Boot.

2. Dependência do Maven

Antes de continuar, vamos adicionar a seguinte dependência em nossopom.xml:


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

A dependência deratpack-spring-boot-starter pom adiciona automaticamenteratpack-spring-bootespring-boot-starter às nossas dependências.

3. Integrando Ratpack com Spring Boot

Podemos incorporar o Ratpack no Spring Boot como uma alternativa aos contêineres de servlets fornecidos pelo Tomcat ou Undertow. Precisamos apenas anotar uma classe de configuração Spring com@EnableRatpacke declarar beans do tipoAction<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);
    }
}

Para aqueles mais familiarizados com Spring Boot, oAction<Chain> pode atuar como um filtro da web e / ou controlador.

Quando se trata de servir arquivos estáticos, Ratpack registra manipuladores automaticamente para recursos estáticos em/publice/static no @AutowiredChainConfigurers.

No entanto, ocurrent implementation dessa “mágica” depende de nossas configurações de projeto e ambiente de desenvolvimento. Portanto, se quisermos obter um serviço estável de recursos estáticos em diferentes ambientes, devemos especificar obaseDir explicitamente:

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

O código acima assume que temos uma pastastatic no classpath. Além disso, nomeamos o beanServerConfig comoratpackServerConfig para substituir o bean padrão registrado emRatpackConfiguration.

Então, podemos testar nosso aplicativo comratpack-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. Integrando Spring Boot com Ratpack

Primeiro, registraremos os beans necessários em uma classe de configuração do Spring:

@Configuration
public class Config {

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

Então, podemos criar um registro facilmente usando o método de conveniênciaspring(…) fornecido porratpack-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()))));
    }
}

No Ratpack, os registros são usados ​​para comunicação entre manipuladores no processamento de solicitações. O objetoContext que usamos em manipuladores implementa a interfaceRegistry.

Aqui, uma instânciaListableBeanFactory fornecida pelo Spring Boot é adaptada aRegistry, para apoiar o registro emHandler'sContext. Portanto, quando quisermos obter um objeto de um tipo específico deContext, oListableBeanFactory será usado para pesquisar os beans correspondentes.

5. Sumário

Neste tutorial, exploramos como integrar o Spring Boot e o Ratpack.

Como sempre, a implementação completa está disponívelover on Github.