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.