You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 02 - Configurando o Ambiente/2.2 - Maven e Gradle/readme.md
+3-121Lines changed: 3 additions & 121 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -554,129 +554,11 @@ zipStorePath=wrapper/dists
554
554
555
555
> **Regra prática:** em projeto legado, siga o que já existe. Em projeto novo, use Gradle com Kotlin DSL se a equipe topar a curva de aprendizado; caso contrário, Maven é sempre uma escolha segura.
556
556
557
+
557
558
---
558
559
559
560
## GraalVM Native Image
560
561
561
-
O **GraalVM Native Image** compila sua aplicação Java para um **executável nativo** usando AOT (Ahead-of-Time compilation), eliminando a JVM em tempo de execução.
**Resultado:** startup em ~50ms (vs ~3s com JVM), uso de memória 10x menor, binário único sem dependências externas — ideal para **serverless, containers, microsserviços**.
docker run --rm minha-empresa/sistema-financeiro:native
657
-
```
658
-
659
-
### Instalar GraalVM
660
-
661
-
```bash
662
-
# Via SDKMAN (recomendado)
663
-
sdk install java 21.0.4-graal
664
-
sdk use java 21.0.4-graal
665
-
666
-
# Verificar
667
-
java -version
668
-
# java version "21.0.4" 2024-07-16 LTS
669
-
# Java(TM) SE Runtime Environment GraalVM EE 21.0.4+8.1-LRE (build 21.0.4+8-jvmci-23.1-b41)
670
-
671
-
# Instalar native-image (necessário para compilação AOT)
672
-
gu install native-image
673
-
```
674
-
675
-
### Limitações do Native Image
676
-
677
-
-**Reflexão precisa ser declarada:** código que usa `Class.forName()` ou frameworks que usam reflexão extensivamente (como Spring) precisam de hints
678
-
-**Build demora muito:** um build nativo pode levar 5-15 minutos vs 30 segundos com JVM
679
-
-**Sem hot reload:** não é possível modificar e recarregar código em runtime
680
-
-**Spring Boot 3+ mitiga a maioria:** com AOT hints gerados automaticamente
562
+
GraalVM Native Image usa AOT (Ahead-of-Time compilation) para transformar sua aplicação em um executável nativo, sem JVM em runtime. O resultado é startup em ~50ms, consumo de memória dramaticamente menor e um binário único — características valiosas para serverless e microsserviços com muitas instâncias.
681
563
682
-
> **Quando usar:** lambdas, functions serverless, CLIs, microsserviços com muitas instâncias (para reduzir custo de memória em Kubernetes). Para aplicações monolíticas com tempo de startup irrelevante, a JVM ainda é mais vantajosa.
564
+
Entender por que o Native Image existe e por que ele tem limitações específicas com reflexão requer compreender o que o ClassLoader faz, o ciclo de JIT compilation e por que um fat JAR do Spring Boot pode levar vários segundos para inicializar. Esse contexto está coberto no módulo 8.3 (Otimização de Performance e JVM), que inclui os detalhes completos de configuração, hints de reflexão, instalação do GraalVM e a decisão de quando o custo de build de 5-15 minutos compensa.
Virtual Threads são o mecanismo que permite escrever código I/O bloqueante com a escalabilidade de código reativo, sem a complexidade de Mono/Flux. Criadas em milhões com custo de memória de poucos kilobytes cada, elas mudam a relação entre concorrência e simplicidade de código.
686
591
687
-
publicvoid processarComLock() {
688
-
lock.lock();
689
-
try {
690
-
buscarDoBanco(); // Virtual thread pode ser suspensa aqui — OK
691
-
} finally {
692
-
lock.unlock();
693
-
}
694
-
}
695
-
```
592
+
O funcionamento interno — carrier threads, mounting/unmounting, o problema de pinning com synchronized — está coberto no módulo 3.4, onde o tema é tratado junto com ExecutorService, race conditions e as demais ferramentas de concorrência. A configuração do Spring Boot para habilitar virtual threads por request também está lá.
696
593
697
-
### Habilitando no Spring Boot 3.2+
594
+
Para referência rápida: `spring.threads.virtual.enabled=true` em `application.properties` é suficiente no Spring Boot 3.2+.
Copy file name to clipboardExpand all lines: 04 - Intermediário/4.2 - JSON com Jackson/readme.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# 4.2 — JSON com Jackson
2
2
3
-
Jackson é a biblioteca de serialização/desserialização JSON mais usada no ecossistema Java. É a padrão do Spring Boot e suporta desde casos simples até cenários complexos com tipos genéricos, customizações e módulos de extensão.
3
+
Jackson é a biblioteca que o Spring Boot usa para converter objetos Java em JSON e vice-versa. Na maioria dos projetos, ela funciona transparentemente — até o dia em que não funciona. `UnrecognizedPropertyException` quando o JSON de entrada tem um campo que seu DTO não mapeia. `InvalidDefinitionException` porque o `ObjectMapper` não sabe serializar `LocalDateTime` sem o `JavaTimeModule`. `MismatchedInputException` ao deserializar um array para um tipo genérico sem `TypeReference`. Este guia cobre o suficiente para você entender o que está acontecendo quando essas exceções aparecem, e como configurar o Jackson corretamente desde o início.
Copy file name to clipboardExpand all lines: 05 - Frameworks/5.3 - Spring Security/readme.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -64,6 +64,8 @@ Spring Security é o framework de segurança padrão para aplicações Java. Ele
64
64
65
65
A partir do Spring Security 5.7+, não se usa mais `extends WebSecurityConfigurerAdapter`. Toda a configuração é feita via `SecurityFilterChain` bean.
66
66
67
+
Vale notar: o `SecurityFilterChain` é uma aplicação direta do padrão Chain of Responsibility da GoF. Cada `Filter` na cadeia decide se processa a requisição e a passa adiante ou a intercepta. Quando você implementa `OncePerRequestFilter` para validar o JWT, está adicionando um elo concreto nessa cadeia. Esse padrão e sua estrutura formal estão documentados no módulo 7.1.
0 commit comments