Pular para o conteúdo
Cesar Schutz

Todos os artigos

27 artigos em 6 livros e 1 série, do mais recente ao mais antigo.

27 artigos

202621 artigos

  1. Desenvolvimento de Software12 min de leitura

    Filtros de serialização no Jackson — mascarando número de cartão nos logs

    Como usar @JsonFilter, PropertyFilter e um mixin em Object para mascarar o número do cartão e remover o CVV só no mapper de log, com a API ainda devolvendo tudo.

    #Spring#Logs#Pagamentos

  2. Arquitetura de Software40 min de leitura

    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.

    #Kubernetes#Spring#Mensageria#Trade-offs

  3. Atualizações do Java46 min de leitura

    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.

    #LTS#JVM#Concorrência#Criptografia

  4. Dados19 min de leitura

    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.

    #Banco de Dados#Concorrência#Spring#Trade-offs

  5. Desenvolvimento de Software24 min de leitura

    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.

    #Virtual Threads#Concorrência#JVM

  6. Arquitetura de Software10 min de leitura

    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.

    #Pagamentos#Mensageria#Banco de Dados

  7. Arquitetura de Software11 min de leitura

    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.

    #Pagamentos#Idempotência#Banco de Dados

  8. Arquitetura de Software31 min de leitura

    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.

    #Pagamentos#Banco de Dados#Idempotência

  9. Arquitetura de Software7 min de leitura

    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.

    #AWS#Mensageria

  10. SRE7 min de leitura

    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 traceparent e o tracestate, valores inválidos, a granularidade certa e o ID atravessando o outbox.

    #Logs#Microsserviços#Mensageria

  11. Desenvolvimento de Software14 min de leitura

    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.

    #Spring#AOP

  12. Desenvolvimento de Software7 min de leitura

    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. Como AopUtils.getTargetClass() recupera a classe real e quando usar ultimateTargetClass().

    #Spring#AOP

  13. Desenvolvimento de Software9 min de leitura

    AtomicBoolean — o sinalizador thread-safe da parada graciosa

    Por que um boolean comum pode não ser visto por outra thread, quando volatile basta, por que preferir AtomicBoolean e como ligar o SIGTERM a um job sem encerrar a JVM no meio de um lote.

    #Concorrência#Kubernetes#JVM

  14. Desenvolvimento de Software8 min de leitura

    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).

    #Gradle#Spring

  15. DevOps9 min de leitura

    Kubernetes CronJob — concorrência, retries e tempo máximo de execução

    Os campos que protegem rotinas agendadas: concurrencyPolicy, startingDeadlineSeconds, activeDeadlineSeconds, backoffLimit, restartPolicy e timeZone, e o que eles não garantem.

    #Kubernetes#Concorrência

  16. SRE9 min de leitura

    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 LogstashEncoder e o suporte nativo do Spring Boot 3.4+ (ECS, Logstash e GELF), com saídas reais, comparativo e critério de escolha.

    #Spring#Logs#Trade-offs

  17. DevOps10 min de leitura

    SIGTERM e SIGKILL — o ciclo de término de um pod no Kubernetes

    Como o Kubernetes encerra um pod: SIGTERM, SIGKILL e grace period, a corrida com os endpoints que o preStop resolve, exit codes, o graceful shutdown do Spring Boot e a pegadinha do PID 1.

    #Kubernetes#Spring

  18. SRE8 min de leitura

    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.

    #Logs#Spring

  19. Arquitetura de Software8 min de leitura

    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.

    #Trade-offs#Microsserviços

  20. Segurança10 min de leitura

    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.

    #JWT#Criptografia

  21. Dados6 min de leitura

    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.

    #Trade-offs#AWS

  • Desenvolvimento de Software12 min de leitura

    Filtros de serialização no Jackson — mascarando número de cartão nos logs

    Como usar @JsonFilter, PropertyFilter e um mixin em Object para mascarar o número do cartão e remover o CVV só no mapper de log, com a API ainda devolvendo tudo.

    #Spring#Logs#Pagamentos

  • Arquitetura de Software40 min de leitura

    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.

    #Kubernetes#Spring#Mensageria#Trade-offs

  • Atualizações do Java46 min de leitura

    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.

    #LTS#JVM#Concorrência#Criptografia

  • Dados19 min de leitura

    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.

    #Banco de Dados#Concorrência#Spring#Trade-offs

  • Desenvolvimento de Software24 min de leitura

    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.

    #Virtual Threads#Concorrência#JVM

  • Arquitetura de Software10 min de leitura

    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.

    #Pagamentos#Mensageria#Banco de Dados

  • Arquitetura de Software11 min de leitura

    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.

    #Pagamentos#Idempotência#Banco de Dados

  • Arquitetura de Software31 min de leitura

    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.

    #Pagamentos#Banco de Dados#Idempotência

  • Arquitetura de Software7 min de leitura

    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.

    #AWS#Mensageria

  • SRE7 min de leitura

    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 traceparent e o tracestate, valores inválidos, a granularidade certa e o ID atravessando o outbox.

    #Logs#Microsserviços#Mensageria

  • Desenvolvimento de Software14 min de leitura

    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.

    #Spring#AOP

  • Desenvolvimento de Software7 min de leitura

    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. Como AopUtils.getTargetClass() recupera a classe real e quando usar ultimateTargetClass().

    #Spring#AOP

  • Desenvolvimento de Software9 min de leitura

    AtomicBoolean — o sinalizador thread-safe da parada graciosa

    Por que um boolean comum pode não ser visto por outra thread, quando volatile basta, por que preferir AtomicBoolean e como ligar o SIGTERM a um job sem encerrar a JVM no meio de um lote.

    #Concorrência#Kubernetes#JVM

  • Desenvolvimento de Software8 min de leitura

    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).

    #Gradle#Spring

  • DevOps9 min de leitura

    Kubernetes CronJob — concorrência, retries e tempo máximo de execução

    Os campos que protegem rotinas agendadas: concurrencyPolicy, startingDeadlineSeconds, activeDeadlineSeconds, backoffLimit, restartPolicy e timeZone, e o que eles não garantem.

    #Kubernetes#Concorrência

  • SRE9 min de leitura

    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 LogstashEncoder e o suporte nativo do Spring Boot 3.4+ (ECS, Logstash e GELF), com saídas reais, comparativo e critério de escolha.

    #Spring#Logs#Trade-offs

  • DevOps10 min de leitura

    SIGTERM e SIGKILL — o ciclo de término de um pod no Kubernetes

    Como o Kubernetes encerra um pod: SIGTERM, SIGKILL e grace period, a corrida com os endpoints que o preStop resolve, exit codes, o graceful shutdown do Spring Boot e a pegadinha do PID 1.

    #Kubernetes#Spring

  • SRE8 min de leitura

    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.

    #Logs#Spring

  • Arquitetura de Software8 min de leitura

    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.

    #Trade-offs#Microsserviços

  • Segurança10 min de leitura

    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.

    #JWT#Criptografia

  • Dados6 min de leitura

    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.

    #Trade-offs#AWS

20256 artigos

  1. Atualizações do Java46 min de leitura

    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.

    #LTS#Migração#JVM#Gradle

  2. Atualizações do Java56 min de leitura

    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.

    #LTS#Linguagem#JVM#Criptografia

  3. Atualizações do Java52 min de leitura

    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.

    #LTS#Linguagem#Virtual Threads#Concorrência

  4. Atualizações do Java53 min de leitura

    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.

    #LTS#Linguagem#JVM#Migração

  5. Atualizações do Java52 min de leitura

    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.

    #LTS#Linguagem#JVM#Migração

  6. Atualizações do Java43 min de leitura

    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, CompletableFuture e Metaspace no lugar do PermGen, com exemplos antes e depois e a lista completa das 55 JEPs.

    #LTS#Linguagem#JVM#Concorrência