Práticas recomendadas e tutoriais

Dê um pouco de amor do Ratpack ao seu aplicativo Spring Boot

Recentemente, comecei a trabalhar com o Ratpack e estou gostando bastante. Na maioria das vezes, fiz projetos rápidos do zero. Mas gostaria de usá-lo em um aplicativo Spring Boot existente para substituir a parte tradicional do MVC. Na verdade, isso é fácil de fazer, pois tudo já foi pensado graças ao Módulo de mola.

Se você acompanha este blog, talvez se lembre de uma postagem antiga sobre armazenamento, indexação e pesquisa arquivos com Couchbase e Spring Boot. Usarei o código relacionado como exemplo. A ideia é substituir o Spring MVC pelo Ratpack e tornar meus serviços legados, síncronos e bloqueadores, assíncronos e não bloqueadores. O código resultante está disponível em github também.

Adição das dependências corretas

Estou usando o Gradle. O Ratpack é muito bem integrado a ele. Tudo o que você precisa fazer para adicionar um módulo é adicionar a dependência correta chamando ratpack.dependency("myFavoriteModule"). Portanto, em nosso caso, para adicionar suporte ao Spring Boot, você precisa adicionar ratpack.dependency("spring-boot"). Infelizmente, a versão gerenciada automaticamente pelo Ratpack é inferior a 1.4.0.M3, que é a versão que traz a configuração automática do Couchbase. Portanto, desta vez terei que adicionar as dependências manualmente.

O que você pode ver aqui é que ratpack.dependency("spring-boot") é um atalho para adicionar org.springframework.boot:spring-boot-autoconfigure:1.4.0.M3 e io.ratpack:ratpack-spring-boot:1.3.3. O que este módulo oferece a você é a capacidade de integrar um servidor Ratpack ao seu aplicativo Spring. Você poderá recuperar o Spring @Beans do contexto do Ratpack e declarar manipuladores como configuração do Spring.

Declarar a configuração do Ratpack

Uma coisa que você deve adorar no Spring Boot é a configuração automática. Você só precisa ter certeza de que o SDK do Couchbase está no classpath e que a propriedade spring.couchbase.bootstrap-hosts é declarado. Nesse momento, os Spring beans serão instanciados para um Bucket padrão. E essa instância do bucket estará disponível como um bean ou no contexto do Ratpack. Portanto, você não precisa declarar nenhuma ligação para o Couchbase na camada do Ratpack.

A primeira coisa que você tradicionalmente faz com o Ratpack é iniciar um servidor e definir a configuração e os manipuladores. Aqui já temos um aplicativo Spring Boot em execução. Todas as classes anotadas com @Configuration serão coletadas automaticamente e adicionadas à configuração do aplicativo. A primeira etapa para declarar essa configuração é criar uma classe que implemente RatpackServerCustomizer e anotá-lo com @Confguration. Isso permite que você defina uma lista de manipuladores, associações e configuração do servidor. No exemplo a seguir, estou registrando algumas propriedades do servidor e vinculando várias classes ao contexto do Ratpack. A propriedade 'server.maxContentLength' é o tamanho máximo do arquivo que você pode carregar.

O sistema de modelos de aplicativos depende do Handlebars, portanto, você precisa do HandlebarsModule. O FileHandler tratará de todas as chamadas para a API '/file' e o StoredFileRenderer garantirá que o StoredFile seja renderizado corretamente. As duas últimas associações são para gerenciamento de erros.

A coisa mais importante que está acontecendo aqui é a fileAPI que declara meu manipulador. Um manipulador define o que acontece quando um usuário acessa um determinado URL. Aqui associamos todas as chamadas '/file/*' à classe FileHandler. Também definimos o comportamento para POST em '/fulltext' e '/n1ql'.

O Ratpack usa promessas. Portanto, quando você analisa um formulário proveniente de uma solicitação POST, obtém uma promessa. O que você pode ver em cada um desses POST é que o SearchService é obtido do contexto do Ratpack. Mesmo que ele nunca tenha sido vinculado na configuração. Isso ocorre porque os Spring beans estão disponíveis no contexto como parte da integração.

A próxima etapa é chamar esse serviço de pesquisa que retorna um Observable. Podemos usar o módulo rx-java do Ratpack que fornece um wrapper para Observables. Ele envolverá isso como uma promessa. Em seguida, você pode simplesmente renderizar a resposta.

Nesse ponto, nos livramos de todos os arquivos Spring MVC controladores. Como você pode ver, meu serviço retorna um Observable. O que não é o caso em meu aplicativo anterior.

Migração de serviços para o Ratpack

A maioria dos meus serviços depende do Couchbase. O SDK é baseado no RxJava, portanto, é muito fácil converter a maioria deles em um modo assíncrono e sem bloqueio e fazer com que retornem Observable.

Usando o RxJava

Este é um exemplo muito simples. É uma consulta N1QL que mapeia os resultados para uma lista de mapas. As duas primeiras linhas não mudam em nada, pois estão definindo principalmente a consulta. Você pode ver que o mapeamento parece mais natural quando se usa o bucket síncrono na segunda versão.

Torna-se

E quanto ao bloqueio de código legado?

Alguns dos meus serviços dependem de código antigo e bloqueador. Embora não exista uma maneira mágica de torná-los não bloqueantes, podemos facilmente envolvê-los em uma Promise. Isso nos permitirá usá-las facilmente nos manipuladores. Envolver a chamada de bloqueio é muito fácil, tudo o que você precisa fazer é envolver sua função com "Blocking.get()". Aqui está um exemplo muito simples:

torna-se

Conclusão

Agora você sabe praticamente tudo o que precisa saber para dar um pouco de Ratpack Love ao seu aplicativo Spring Boot. Se achar que está faltando alguma coisa, entre em contato comigo em twitter ou nos comentários abaixo.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Laurent Doguin

Laurent é um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve código em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programação reativa e outras coisas que estão na moda. Ele também foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experiência para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Relações com Desenvolvedores na Couchbase.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.