Em conjunto com a minor release do Micronaut 1.0.1, a Object Computing Inc. (OCI) também lançou o Micronaut para Spring 1.0 M1. Conforme o comunicado de imprensa:
O Micronaut para Spring adiciona a capacidade de usar o modelo de programação baseado em anotações do Spring, há muito estabelecido, para criar aplicativos e bibliotecas do Micronaut que funcionam com o Micronaut e o Spring.
Utilizando a compilação "Ahead of Time", o Micronaut para Spring permite: integrar componentes Spring em uma aplicação Micronaut, executar aplicativos Spring como aplicativos Micronaut, e expor o Micronaut beans a um aplicativo Spring.
Jonathan Giles, engenheiro sênior de software da Microsoft, recentemente debateu sobre por que os desenvolvedores deveriam pensar em migrar para o Micronaut:
O Micronaut adota uma abordagem diferente para permitir que tudo o que nós, desenvolvedores, aceitamos como garantido no Spring Boot e MicroProfile. Em vez de processar a anotação de tempo de execução como Spring Boot e MicroProfile, o Micronaut usa processadores de anotações em tempo de compilação para gerar classes adicionais que são compiladas junto ao seu código. Isso significa que o tempo de inicialização é reduzido devido à quantidade substancialmente menor de sobrecarga necessária para verificar o caminho de classe do seu projeto. Na verdade, o Micronaut tenta evitar o máximo de reflexão possível, usando-o apenas quando absolutamente necessário.
Anteriormente conhecido como Project Particle, o Micronaut é uma estrutura full-stack baseada em JVM para criação de aplicativos baseados em microservice, cloud-native e serverless que podem ser escritos em Java, Groovy e Kotlin. Graeme Rocher, engenheiro-chefe de software e líder de produto da Grails e Micronaut na OCI, apresentou o Micronaut pela primeira vez na conferência Greach em março de 2018. O plano para a versão 1.0 incluía três lançamentos candidatos em um período de menos de três semanas antes do lançamento oficial da versão 1.0 no final de outubro de 2018.
Aplicação de exemplo
Um exemplo de aplicativo, incluído no repositório Micronaut para Spring, demonstra como usar o Micronaut para Spring, incluindo ferramentas para converter o aplicativo em uma imagem nativa da GraalVM.
O arquivo Application.java
mostrado abaixo usa um aplicativo Spring Boot no nível de código-fonte que pode ser executado como um aplicativo Micronaut:
1 @SpringBootApplication
2 public class Application {
3
4 public static void main(String... args) {
5 Micronaut.run(Application.class);
6 // SpringApplication.run(Application.class);
7 }
A única diferença entre um aplicativo Spring Boot e um aplicativo Micronaut é mostrada na linha 5. A linha 6, comentada para comparação, normalmente seria usada para um aplicativo Spring Boot.
O comando:
./gradlew bootRun
compila e inicializa o servidor Micronaut, onde:
curl -X GET http://localhost:8080/greeting?name=Mike
retornará:
{"id":1,"content":"Hola, Mike!"}
GraalVM
Agora é possível executar aplicativos Spring na GraalVM que são totalmente compatíveis com o modelo de programação baseado em anotações do Spring. O aplicativo de exemplo pode ser convertido em uma imagem nativa da GraalVM com o Micronaut para Spring.
Os dois comandos a seguir inicializam o processo:
./gradlew assemble
java -cp build/libs/greeting-service-all.jar io.micronaut.graal.reflect.GraalClassLoadingAnalyzer
A classe Micronaut GraalClassLoadingAnalyzer
é usada para analisar os requisitos de carregamento de classe de um aplicativo Micronaut.
A distribuição GraalVM Java é fornecida com o utilitário native-image
, usado para construir uma imagem nativa de um aplicativo. Há vários parâmetros configuráveis, conforme mostrado em uma listagem parcial da chamada native-image
:
native-image --no-server \
--allow-incomplete-classpath \
--class-path build/libs/greeting-service-all.jar \
-H:ReflectionConfigurationFiles=build/reflect.json \
-H:EnableURLProtocols=http \
-H:Name=greeting-service \
-H:Class=greeting.example.Application \
Um script shell conveniente, build-native-image.sh
, está incluído no aplicativo de exemplo para automatizar o processo. O arquivo executável da imagem nativa gerada, greeting-service
, pode ser chamado para iniciar o servidor:
./greeting-service
Projetado para uma inicialização instantânea, a imagem nativa do aplicativo foi iniciada em 42ms:
Fontes
- Natively Compiling Micronaut Microservices Using GraalVM for Insanely Faster Startups por Jonathan Giles (3 de Outubro, 2018).
- The Road to Micronaut 1.0: A JVM-Based Full-Stack Framework por InfoQ (19 de Outubro, 2018).
- Micronaut 1.0 GA Released por Graeme Rocher (23 de Outubro, 2018).