A Microservice in Micronaut
# Run application
./gradlew run
# Run application in watching mode
./gradlew run --continuous
# Package application
./gradlew assemble
Install SDKMAN
curl -s https://get.sdkman.io | bash
sdk install java
sdk install gradle
sdk install micronaut
mn create-app harbor -i --test=junit
mn create-controller SpaceX
mn create-bean SpaceXService
mn create-client SpaceX
mn feature-diff --features acme
gradle run
gradle jib
gradle dockerBuild
gradle dockerBuildNative
gradle nativeImage
gradle clean run
---
Micronaut
- AOT
- Fast startup time
- Low Memory Footprint
- No Reflections
- DI
- AOP
- Features
- Micronaut Data-{processor,jdbc} - https://micronaut-projects.github.io/micronaut-data/latest/guide/index.html
- Micronaut Security-{annotations,jwt}
- jib
- config-consul
- micronaut-discovery-client
- micronaut-openapi
- micronaut-jdbc-hikari
- micronaut-hibernate-jpa
- micronaut-liquibase
- micronaut-graal
- micronaut-management
- micrometer-atlas
- micronaut-tracing
- micronaut-kubernetes-discovery-client
- Microservice design patterns - Service Discovery, Circuit Breaker
- Scaffolding
- Cache
- Default Login and Logout Handler
- Various auth and security mechanisms - https://guides.micronaut.io/micronaut-security-jwt/guide/index.html
- Support for ScheduledJob
- Configuration
- Test Container
- Build Native Image using GraalVM
---
@Entity
@Id
@GeneratedValue
@JdbcRepository, {CrudRepository<>,PageableRepository<>}
Declarative Rest Client
Declarative Crud Repository
Client-side Load Balancing
application-test.yml
Annotation Configuration
Management Endpoints
/beans
/health
/metrics
/info
@Inject
EmbeddedServer server //refers to the server that was started up for this test suite
@Inject
ApplicationContext context
GraalVM
<logger name="io.micronaut.http.client" level="TRACE"/>
try (ApplicationContext context = ApplicationContext.run()) {
MyBean myBean = context.getBean(MyBean.class);
// do something with your bean
}
Environment environment = applicationContext.getEnvironment();
final BeanContext context = BeanContext.run();
Map<String, Person> inMemoryDatastore = new ConcurrentHashMap<>();
Operations and Fallback
Lombok - https://docs.micronaut.io/2.2.0/guide/index.html#lombok
Use JPARepository for Hibernate
HttpResponse.status(HttpStatus.CREATED).body("success")
@Introspected for POJO/DTO
Ref:
- https://www.youtube.com/watch?v=S5yfTfPeue8
- https://github.com/asc-lab/micronaut-microservices-poc
- https://alvarosanchez.github.io/micronaut-workshop/
- https://mfarache.github.io/mfarache/Building-microservices-Micronoaut/