Newsletter Java: Novedades de la Semana 5 Agosto 2025
Tu newsletter semanal de Programando En Java
¡Bienvenido/a a tu dosis semanal de café + código!
Esta semana el ecosistema Spring se desató con una avalancha de releases milestone. Si eres de los que piensa que los changelogs son mejores que Netflix... esta newsletter es para ti ☕🚀.
Todo listo para que sigas subiendo de nivel en Java. ¡Vamos al lío! ☕💻
Redes Sociales
📘 Facebook: Programando en JAVA
🐦 X (Twitter): ProgEnJava
📸 Instagram: Programando en Java
💼 LinkedIn: Ricardo Romero Benítez
▶️ YouTube: Programando en Java
🎵 TikTok: Programando en Java
🧵 Threads: Programando en Java
💬 Discord: Comunidad de Programando en JAVA
🚀 ¡CodeJa Versión 1.0!
¡Ya está aquí Codeja 1.0! 🎉 Plataforma de retos semanales, cursos, practicar con editor online y más para backend (Java/Kotlin + Spring Boot).
Completa al menos 1 curso antes del 28 Septiembre 2025 y participa automáticamente en el sorteo de 12 licencias JetBrains. ¡Pruebalo ya!
🎥 Video de la Semana
👨💻 CodeCast 11 - @develatter
En este episodio hablamos sobre programación, tecnología y carreras profesionales, explorando la historia de un programador que decidió reinventarse tras pasar por varias profesiones.
A lo largo de la charla abordamos:
🚀 Cómo superar la insatisfacción laboral y reinventarse en la programación.
🧠 El papel de la salud mental y la motivación en la carrera tecnológica.
🎓 Opiniones sobre la formación en FP, el autoaprendizaje y la especialización.
💻 Lenguajes y tecnologías favoritas: Rust, Java, TypeScript, Python, R…
🤖 Impacto real de la inteligencia artificial en el mercado laboral y la automatización.
🌍 La importancia de crear proyectos propios, participar en open source y mantener presencia en redes sociales.
👉 Mira el podcast completo aquí:
También en Spotify:
📦 Novedades en Librerías y Frameworks
🔥 Spring Boot 4.0.0-M2
Soporte para
@HttpServiceClient
y scanning/autoconfig para clientes HTTP declarativos (facilita definir clientes tipo "interface-driven" sin mucho boilerplate).JSpecify: gestión de anotaciones de nulabilidad a través de dependencia/gestión centralizada — espera cambios si usas anotaciones de nullability heredadas.
Compatibilidad con Gradle 9 (importante si trabajas con builds nuevos).
OpenTelemetry starter y reorganización de módulos de observabilidad.
Deprecaciones/changes: se elimina soporte para Undertow (si lo usas tendrás que migrar a Tomcat/Jetty/Netty), ajustes en Actuator y ajustes de logging (charset unificado).
Recomendación rápida: revisa el Migration Guide antes de tocar
pom.xml
/build.gradle
(especialmente por cambios en nullability y Undertow).
Cómo probarlo rápido: crea una rama, actualiza spring-boot-starter-parent
(o tu BOM) a 4.0.0-M2
, corre la batería de tests y activa perfiles de observability para verificar trazas OTLP.
🔐 Spring Security 7.0.0-M2
Puntos clave:
Nuevo
ExpressionTemplateValueProvider
para expresiones meta-anotadas (más potencia al componer reglas de autorización con plantillas).Mejor integración con
PathPatternRequestMatcherBuilderFactoryBean
(mejor matching de rutas y menor boilerplate para patrones HTTP).Revisa la migration guide 6→7: cambios en APIs y en comportamiento por defecto pueden romper filtros personalizados.
Tip: si tienes reglas expresadas en SpEL o plantillas, añade tests de integración que evalúen las expresiones tras la actualización.
🛡️ Spring Authorization Server 2.0.0-M2
Qué cambia:
El
OAuth2RefreshTokenAuthenticationProvider
ahora puede emitir access tokens al refrescar, lo que mejora los flujos de sesión de larga duración (menos pasos manuales en refresh flows).Correcciones y upgrades para interoperabilidad con Spring Security 7.0.x. Si manejas refresh tokens, prueba escenarios de refresh y revocación.
🔗 Spring for GraphQL 2.0.0-M2
toEntity()
ahora lanzaGraphQlException
si falla la deserialización
🧠 Spring Session 4.0.0-M2
Uniformidad en los copyright 📄 Release Notes
⚙️ Spring Integration 7.0.0-M2
Uso de
@Nullable
con JSpecifyPartitionedDispatcher
ahora usaList
para mejor rendimiento
🧩 Spring Modulith 2.0.0-M2
Refactor de
EventPublicationRepository
para MongoDB y Neo4jMejora en el bootstrap de
ApplicationModulesEndpoint
📄 Spring REST Docs 4.0.0-M2
Uso de
JMustache
como dependencia externaSoporte para Jackson 3
💼 Spring Batch 6.0.0-M2
Nueva implementación del modelo chunk-oriented y capacidad de recuperación de ejecuciones de job que fallaron abruptamente.
Actualizaciones de dependencias y cambios para alinearse con Spring Framework 7.
Si tienes procesamiento por lotes crítico, prueba los jobs con fallos simulados y revisa políticas de reintento/recovery.
🐰 Spring AMQP 4.0.0-M4
Soporte explícito para
JsonMapper
de JacksonShutdown delayed en
SimpleMessageListenerContainer
para esperar replies
🧵 Spring for Apache Kafka 4.0.0-M4
Migración a Kafka client 4.x implica cambios de compatibilidad (por ejemplo, KRaft vs ZooKeeper, eliminación de funcionalidades dependientes de ZooKeeper).
Mejoras en rendimiento y nuevas opciones en
@RetryableTopic
(soporte para expresiones${...}
y#{...}
).Si usas Embedded Kafka para tests: revisa la configuración ahora que la infra de pruebas puede usar KRaft.
⚡ Spring for Apache Pulsar 2.0.0-M2
Eliminación de APIs deprecated desde 1.2.0
Limpieza de exclusiones en Gradle
☕ Actualizaciones del JDK
Esta semana no hubo feature GA releases del JDK; el ciclo de parches de JDK 21/24/25 sigue su agenda trimestral y OpenJDK 25 estaba en ramp-down / release-candidate a finales de agosto (con GA planificada para septiembre en algunos calendarios). Si dependes de features de la última JDK, revisa la página de OpenJDK para el estado del Release Candidate y calendario exacto.
🧪 Nuevas JEPs o Propuestas
En la ventana del 29-ago no hubo JEPs críticos publicados la semana (nada nuevo que merezca anuncio de producción).
🛠️ Herramientas y Utilidades para Developers
IntelliJ IDEA 2025.2.1 ya está aquí
IntelliJ IDEA 2025.2.1 es el parche menor publicado como primera actualización para la serie 2025.2. Trae correcciones enfocadas en estabilidad, ejecución de builds/runs y compatibilidad con algunos servidores y herramientas de CI — ideal para desarrolladores Java/Kotlin que no quieran sorpresas al ejecutar proyectos con Gradle/Maven o desplegar en WebLogic. youtrack.jetbrains.com
¿Qué arregla (resumen corto y práctico)?
EAR artifacts: la IDE interpreta y gestiona correctamente las configuraciones de artefactos EAR. (IDEA-373295). youtrack.jetbrains.com
Create Branch
: la acción vuelve a estar accesible desde todas las partes de la UI. (IJPL-199191). youtrack.jetbrains.comExportar diagramas a SVG funcionando como se espera. (IJPL-174653). youtrack.jetbrains.com
Maven Runner: ahora reconoce y trata bien las opciones JVM que comienzan por
-X
en el campo VM Options (IDEA-376845). Esto evita que flags como-Xmx
o-Xms
se ignoren en ejecuciones desde la IDE. youtrack.jetbrains.comTerminal en Windows: los procesos terminal vuelven a terminar correctamente (IJPL-159752) — menos procesos colgados en CI locales. youtrack.jetbrains.com
WebLogic: la IDE vuelve a reconocer rutas home válidas de WebLogic y puede arrancar servidores WebLogic desde el IDE. (IDEA-376172, IDEA-377454). youtrack.jetbrains.com
Kotlin + Gradle 9:
main()
en proyectos Kotlin construidos con Gradle 9.0 vuelve a ejecutarse correctamente desde la IDE (IDEA-376030). Muy útil si ya estás probando Gradle 9 en tus pipelines. youtrack.jetbrains.comMaven -f: las configuraciones de ejecución de Maven reconocen y ejecutan correctamente archivos POM personalizados especificados con
-f
. (IDEA-376875). youtrack.jetbrains.com
Para ver la lista completa de issues resueltos y builds relacionados, JetBrains mantiene las release notes y páginas de builds en YouTrack (incluye preview / RC / final). youtrack.jetbrains.com+1
💡 Usa Ahead-of-Time (AOT) Class Loading & Linking de Java 24 para arrancar más rápido
Java 24 permite crear una cache AOT que precarga y enlaza clases en disco para reducir tiempos de arranque (útil en microservicios y CLIs)
Cómo probarlo:
Graba una ejecución representativa para generar la configuración AOT:
java -XX:AOTMode=record -XX:AOTConfiguration=app.aotconf -jar app.jar
# interactúa con la app para cubrir paths importantes
Genera/usa la cache y arranca con ella (modo ON):
# ejecutar con la config ya generada
java -XX:AOTMode=on -XX:AOTConfiguration=app.aotconf -jar app.jar
Qué puedes esperar: mejoras de inicio más rápidos, puede reducir de startup del orden 30–40% en apps ejemplo (la cache puede ocupar decenas/cientos de MB según la app; en un ejemplo PetClinic fueron ~130 MB).
¿Te ha molado? Comparte esta newsletter con otro friki del backend 💻
¿Preguntas o sugerencias? Responde a este correo, y charlamos.