Todos os artigos
27 artigos em 6 livros e 1 série, do mais recente ao mais antigo.
202621 artigos
Filtros de serialização no Jackson — mascarando número de cartão nos logs
Como usar
@JsonFilter,PropertyFiltere um mixin emObjectpara mascarar o número do cartão e remover o CVV só no mapper de log, com a API ainda devolvendo tudo.CronJob ou endpoint + fila — onde rodar o batch de uma API Spring Boot no Kubernetes
Uma API Spring Boot no Kubernetes precisa de uma rotina agendada: CronJob com a mesma imagem e o perfil
batch, ou endpoint que enfileira no SQS para a própria API consumir? Onze critérios comparados.Java 29 (próxima LTS) — o que o Java 26 e o 27 já trouxeram
O caminho do Java 25 até a próxima LTS, o Java 29 (prevista para setembro de 2027): as JEPs do Java 26 e do 27, o que ainda está em preview, exemplos de código e o que conferir na migração.
Bloqueio otimista e pessimista — como funcionam e quando usar cada um
Como impedir que gravações simultâneas se atropelem: coluna de versão ou trava da linha. SQL testado no PostgreSQL, Spring Data JPA, NOWAIT e SKIP LOCKED, deadlock, isolamento e o UPDATE condicional.
Virtual threads no Java 21 — pinning e CLOSE_WAIT
Por que um serviço Java 21 com virtual threads congela sem erro no log: pinning por
synchronized(resolvido no Java 24, JEP 491) e CLOSE_WAIT como rastro. Thread dump, JFR, bulkhead e circuit breaker.Efeito externo sem registro local — a cobrança passou e o banco não gravou
A captura no adquirente passa e a gravação no seu banco falha: grave a intenção antes de causar o efeito. Escrita dupla, outbox e relay com SQL testado, conciliação, CDC, event sourcing e 2PC.
Chave de idempotência — como impedir a cobrança duplicada no retry
Por que consultar antes de gravar não impede que um retry cobre o cliente duas vezes, e como resolver com chave de idempotência, restrição única e resposta guardada. Com SQL testado no PostgreSQL.
Arquitetura de ledger — partidas dobradas, saldos e conciliação
O que 12 artigos ensinam sobre ledgers de grau financeiro: registro append-only, double-entry garantido pelo banco, saldos materializados, idempotência e conciliação como entregável de engenharia — com exemplos em Java.
SNS MessageAttributes e Filter Policy — filtrando mensagens antes do SQS
Como fazer o SNS entregar a cada fila SQS só as mensagens que interessam: atributos de mensagem, filter policy na assinatura, filtro por atributo ou pelo corpo, operadores, limites e cuidados.
W3C Trace Context — correlacionando logs entre microsserviços com o traceparent
O padrão W3C que leva o mesmo ID de rastreamento por todos os serviços de uma operação: o
traceparente otracestate, valores inválidos, a granularidade certa e o ID atravessando o outbox.AOP no Spring — JDK Dynamic Proxy, CGLIB e aspects customizados
Como o Spring aplica log, transação e métricas fora da regra de negócio: conceitos de AOP, JDK Dynamic Proxy ou CGLIB (e por que o Boot prefere CGLIB), a self-invocation e aspects próprios.
AopUtils.getTargetClass() — desembrulhando os proxies do Spring
Com o bean envolto em proxy,
bean.getClass()devolve a classe do proxy e a leitura de anotações falha. ComoAopUtils.getTargetClass()recupera a classe real e quando usarultimateTargetClass().AtomicBoolean — o sinalizador thread-safe da parada graciosa
Por que um
booleancomum pode não ser visto por outra thread, quandovolatilebasta, por que preferirAtomicBooleane como ligar oSIGTERMa um job sem encerrar a JVM no meio de um lote.Gradle — quando usar implementation, api, compileOnly e as demais configurações
Cada configuração de dependência do Gradle alimenta um classpath: compilação, execução, processadores de anotação ou testes. Guia para bibliotecas e starters Spring Boot, com o papel do
platform(BOM).Kubernetes CronJob — concorrência, retries e tempo máximo de execução
Os campos que protegem rotinas agendadas:
concurrencyPolicy,startingDeadlineSeconds,activeDeadlineSeconds,backoffLimit,restartPolicyetimeZone, e o que eles não garantem.Logging estruturado em Spring Boot — LogstashEncoder vs o suporte nativo do 3.4+
Cada log como uma linha JSON pesquisável: o caminho clássico com
LogstashEncodere o suporte nativo do Spring Boot 3.4+ (ECS, Logstash e GELF), com saídas reais, comparativo e critério de escolha.SIGTERM e SIGKILL — o ciclo de término de um pod no Kubernetes
Como o Kubernetes encerra um pod:
SIGTERM,SIGKILLe grace period, a corrida com os endpoints que opreStopresolve, exit codes, o graceful shutdown do Spring Boot e a pegadinha do PID 1.Wide events e canonical log lines — a evolução do logging estruturado
Um evento rico em contexto por requisição, no lugar de dezenas de logs parciais: as canonical log lines da Stripe, cardinalidade e Observability 2.0, um filtro em Spring Boot e tail sampling.
Overhead vs overkill — o custo de toda escolha e o exagero dela
Overhead é o custo extra que toda decisão técnica cobra; overkill é a solução desproporcional ao problema. As seis dimensões do overhead e um critério prático para reconhecer overengineering.
JWT — a estrutura e o significado de cada campo
As três partes de um JWT, campo a campo: headers JOSE (
alg,kid…), claims registradas (iss,sub,exp…), algoritmos de assinatura e cuidados de validação. O payload não é criptografado.Data lake vs data warehouse — e onde entra o lakehouse
Schema-on-write vs schema-on-read, ETL vs ELT, dado curado vs dado bruto: o comparativo direto entre Data Warehouse e Data Lake, por que os dois costumam trabalhar juntos e o que o Lakehouse propõe unificar.
Filtros de serialização no Jackson — mascarando número de cartão nos logs
Como usar
@JsonFilter,PropertyFiltere um mixin emObjectpara mascarar o número do cartão e remover o CVV só no mapper de log, com a API ainda devolvendo tudo.CronJob ou endpoint + fila — onde rodar o batch de uma API Spring Boot no Kubernetes
Uma API Spring Boot no Kubernetes precisa de uma rotina agendada: CronJob com a mesma imagem e o perfil
batch, ou endpoint que enfileira no SQS para a própria API consumir? Onze critérios comparados.Java 29 (próxima LTS) — o que o Java 26 e o 27 já trouxeram
O caminho do Java 25 até a próxima LTS, o Java 29 (prevista para setembro de 2027): as JEPs do Java 26 e do 27, o que ainda está em preview, exemplos de código e o que conferir na migração.
Bloqueio otimista e pessimista — como funcionam e quando usar cada um
Como impedir que gravações simultâneas se atropelem: coluna de versão ou trava da linha. SQL testado no PostgreSQL, Spring Data JPA, NOWAIT e SKIP LOCKED, deadlock, isolamento e o UPDATE condicional.
Virtual threads no Java 21 — pinning e CLOSE_WAIT
Por que um serviço Java 21 com virtual threads congela sem erro no log: pinning por
synchronized(resolvido no Java 24, JEP 491) e CLOSE_WAIT como rastro. Thread dump, JFR, bulkhead e circuit breaker.Efeito externo sem registro local — a cobrança passou e o banco não gravou
A captura no adquirente passa e a gravação no seu banco falha: grave a intenção antes de causar o efeito. Escrita dupla, outbox e relay com SQL testado, conciliação, CDC, event sourcing e 2PC.
Chave de idempotência — como impedir a cobrança duplicada no retry
Por que consultar antes de gravar não impede que um retry cobre o cliente duas vezes, e como resolver com chave de idempotência, restrição única e resposta guardada. Com SQL testado no PostgreSQL.
Arquitetura de ledger — partidas dobradas, saldos e conciliação
O que 12 artigos ensinam sobre ledgers de grau financeiro: registro append-only, double-entry garantido pelo banco, saldos materializados, idempotência e conciliação como entregável de engenharia — com exemplos em Java.
SNS MessageAttributes e Filter Policy — filtrando mensagens antes do SQS
Como fazer o SNS entregar a cada fila SQS só as mensagens que interessam: atributos de mensagem, filter policy na assinatura, filtro por atributo ou pelo corpo, operadores, limites e cuidados.
W3C Trace Context — correlacionando logs entre microsserviços com o traceparent
O padrão W3C que leva o mesmo ID de rastreamento por todos os serviços de uma operação: o
traceparente otracestate, valores inválidos, a granularidade certa e o ID atravessando o outbox.AOP no Spring — JDK Dynamic Proxy, CGLIB e aspects customizados
Como o Spring aplica log, transação e métricas fora da regra de negócio: conceitos de AOP, JDK Dynamic Proxy ou CGLIB (e por que o Boot prefere CGLIB), a self-invocation e aspects próprios.
AopUtils.getTargetClass() — desembrulhando os proxies do Spring
Com o bean envolto em proxy,
bean.getClass()devolve a classe do proxy e a leitura de anotações falha. ComoAopUtils.getTargetClass()recupera a classe real e quando usarultimateTargetClass().AtomicBoolean — o sinalizador thread-safe da parada graciosa
Por que um
booleancomum pode não ser visto por outra thread, quandovolatilebasta, por que preferirAtomicBooleane como ligar oSIGTERMa um job sem encerrar a JVM no meio de um lote.Gradle — quando usar implementation, api, compileOnly e as demais configurações
Cada configuração de dependência do Gradle alimenta um classpath: compilação, execução, processadores de anotação ou testes. Guia para bibliotecas e starters Spring Boot, com o papel do
platform(BOM).Kubernetes CronJob — concorrência, retries e tempo máximo de execução
Os campos que protegem rotinas agendadas:
concurrencyPolicy,startingDeadlineSeconds,activeDeadlineSeconds,backoffLimit,restartPolicyetimeZone, e o que eles não garantem.Logging estruturado em Spring Boot — LogstashEncoder vs o suporte nativo do 3.4+
Cada log como uma linha JSON pesquisável: o caminho clássico com
LogstashEncodere o suporte nativo do Spring Boot 3.4+ (ECS, Logstash e GELF), com saídas reais, comparativo e critério de escolha.SIGTERM e SIGKILL — o ciclo de término de um pod no Kubernetes
Como o Kubernetes encerra um pod:
SIGTERM,SIGKILLe grace period, a corrida com os endpoints que opreStopresolve, exit codes, o graceful shutdown do Spring Boot e a pegadinha do PID 1.Wide events e canonical log lines — a evolução do logging estruturado
Um evento rico em contexto por requisição, no lugar de dezenas de logs parciais: as canonical log lines da Stripe, cardinalidade e Observability 2.0, um filtro em Spring Boot e tail sampling.
Overhead vs overkill — o custo de toda escolha e o exagero dela
Overhead é o custo extra que toda decisão técnica cobra; overkill é a solução desproporcional ao problema. As seis dimensões do overhead e um critério prático para reconhecer overengineering.
JWT — a estrutura e o significado de cada campo
As três partes de um JWT, campo a campo: headers JOSE (
alg,kid…), claims registradas (iss,sub,exp…), algoritmos de assinatura e cuidados de validação. O payload não é criptografado.Data lake vs data warehouse — e onde entra o lakehouse
Schema-on-write vs schema-on-read, ETL vs ELT, dado curado vs dado bruto: o comparativo direto entre Data Warehouse e Data Lake, por que os dois costumam trabalhar juntos e o que o Lakehouse propõe unificar.
20256 artigos
Guia de atualizações do Java
Como planejar a migração entre LTS do Java: ciclo de releases, distribuições e licenças, versões mínimas do ecossistema, processo em cinco fases com rollback, segurança, desempenho, containers e CI.
Java 25 (LTS) — arquivos-fonte compactos, Scoped Values, cache AOT e criptografia pós-quântica
Do Java 22 ao 25, para quem vem do Java 21: arquivos compactos,
import module, construtores flexíveis, Scoped Values, cache AOT, headers compactos, criptografia pós-quântica e as 66 JEPs.Java 21 (LTS) — virtual threads, pattern matching e Sequenced Collections
O que mudou do Java 17 ao Java 21: virtual threads, pattern matching para
switch, record patterns, Sequenced Collections, ZGC geracional e as 38 JEPs do Java 18 ao 21, com a versão em que cada recurso chegou.Java 17 (LTS) — records, sealed classes, text blocks e switch expressions
Do Java 12 ao 17, versão a versão: records, sealed classes, text blocks, switch expressions, pattern matching para
instanceof, ZGC e Shenandoah em produção e o que quebra vindo do Java 11.Java 11 (LTS) — módulos, var, HTTP Client e o novo ciclo de releases
O que chegou do Java 9 ao 11 para quem migra do Java 8: sistema de módulos,
var,HttpClient, novas APIs, G1 como padrão, TLS 1.3, a remoção do Java EE e do CORBA e o ciclo de releases a cada seis meses.Java 8 (LTS) — lambdas, Stream API, java.time e o fim do PermGen
O que mudou do Java 7 para o Java 8: lambdas,
Stream,Optional,java.time,CompletableFuturee Metaspace no lugar do PermGen, com exemplos antes e depois e a lista completa das 55 JEPs.
Guia de atualizações do Java
Como planejar a migração entre LTS do Java: ciclo de releases, distribuições e licenças, versões mínimas do ecossistema, processo em cinco fases com rollback, segurança, desempenho, containers e CI.
Java 25 (LTS) — arquivos-fonte compactos, Scoped Values, cache AOT e criptografia pós-quântica
Do Java 22 ao 25, para quem vem do Java 21: arquivos compactos,
import module, construtores flexíveis, Scoped Values, cache AOT, headers compactos, criptografia pós-quântica e as 66 JEPs.Java 21 (LTS) — virtual threads, pattern matching e Sequenced Collections
O que mudou do Java 17 ao Java 21: virtual threads, pattern matching para
switch, record patterns, Sequenced Collections, ZGC geracional e as 38 JEPs do Java 18 ao 21, com a versão em que cada recurso chegou.Java 17 (LTS) — records, sealed classes, text blocks e switch expressions
Do Java 12 ao 17, versão a versão: records, sealed classes, text blocks, switch expressions, pattern matching para
instanceof, ZGC e Shenandoah em produção e o que quebra vindo do Java 11.Java 11 (LTS) — módulos, var, HTTP Client e o novo ciclo de releases
O que chegou do Java 9 ao 11 para quem migra do Java 8: sistema de módulos,
var,HttpClient, novas APIs, G1 como padrão, TLS 1.3, a remoção do Java EE e do CORBA e o ciclo de releases a cada seis meses.Java 8 (LTS) — lambdas, Stream API, java.time e o fim do PermGen
O que mudou do Java 7 para o Java 8: lambdas,
Stream,Optional,java.time,CompletableFuturee Metaspace no lugar do PermGen, com exemplos antes e depois e a lista completa das 55 JEPs.