Ohhnews

分类导航

Baeldung

Spring AI 集成 Anthropic Claude 的提示缓存支持

本文介绍 Spring AI 结合 Anthropic Claude 使用提示缓存的原理与实践。提示缓存允许 Claude 复用此前已处理的提示前缀,避免每次请求都从头处理相同内容,对大型系统指令、工具定义、文档及多轮对话上下文尤为有效,可降低响应延迟与输入令牌成本。Anthropic 对缓存读取通常按常规输入价格的 10% 计费。使用时需注意最小可缓存提示长度因模型而异、缓存存活时间有限、单次请求最多四个缓存断点、修改缓存前缀会导致缓存失效等限制。提示缓存遵循工具、系统、消息的层级顺序,修改某一层会使其及下层缓存失效,因此应把稳定内容放在高层级、易变内容放在低层级。Spring AI 通过 AnthropicCacheStrategy 提供五种策略:NONE、SYSTEM_ONLY、TOOLS_ONLY、SYSTEM_AND_TOOLS 与 CONVERSATION_HISTORY。文中还给出基于 Spring Boot 的配置示例与测试案例,验证缓存写入与命中时的令牌统计变化。
#spring ai#anthropic claude#提示缓存#性能优化#缓存策略
$ more
Jetbrains Blog

Java 27 在 IntelliJ IDEA 中的支持与新特性

Java 27于2026年9月15日发布,包含9个JEP,其中4个为正式特性。IntelliJ IDEA从第一天起支持Java 27,可自动下载或配置JDK 27,并支持预览特性。正式特性包括:G1成为所有环境的默认垃圾回收器、TLS 1.3后量子混合密钥交换、紧凑对象头默认启用、JFR进程内数据脱敏。预览特性包括惰性常量、模式匹配中的原始类型、结构化并发、PEM加密对象编码;Vector API继续孵化。JDK 27还修复了调试器单步性能问题。Project Valhalla的值对象和严格字段初始化已瞄准JDK 28预览。
#java 27#intellij idea#jdk#预览特性#垃圾回收
$ more
DZone Java

dbt 携手 Apache Flink:数据工程师的统一工作流

dbt 正将 SQL 数据转换能力扩展到 Apache Flink 流处理,目标是让数据工程师用同一套工作流管理批处理与流处理。文章指出,企业在 Snowflake、BigQuery、Databricks 上运行批处理 SQL,在 Flink 上运行流处理,形成两套工具链、技能和 CI/CD。Kafka、Flink 与 Iceberg 的组合将运营层与分析层连接起来:实时事件经 Flink 处理后写入 Iceberg,供仓库和查询引擎直接分析。Confluent 开源的 dbt-confluent 适配器和 confluent-sql 驱动允许将流式管道定义为 dbt 模型,支持 view、streaming_table、streaming_source 三种物化方式,并用标准 dbt run 部署。测试通过快照查询实现,文档通过 INFORMATION_SCHEMA 生成,兼容 Airflow、Dagster、Pandas、Streamlit 和 LangChain。dbt 技能因此可直接迁移到流处理,推动一个团队、一个工具、一个治理标准覆盖批流场景。
#dbt#apache flink#数据工程#流处理#sql
$ more
Baeldung

Gson反序列化中的InaccessibleObjectException问题与解决方案

本文介绍Java 9引入的平台模块系统(JPMS)强化封装后,使用Gson反序列化JSON时遇到的InaccessibleObjectException问题及其解决办法。Gson依赖反射访问私有字段,在模块化项目中无法访问自有类的私有字段,会抛出由InaccessibleObjectException引发的JsonIOException。文章给出四种方案:把字段改为public;在module-info.java中用opens语句向com.google.gson开放包;实现自定义TypeAdapter,通过公共API(setter、构造器或构建器)创建对象;或在启动时传入--add-opens参数(仅作最后手段)。由于Gson自2.10起改用record的规范构造器实例化对象,record可在模块化项目中开箱即用地反序列化。对于java.time中的LocalDate、Instant、Duration等类,需使用与私有字段同名的嵌套JSON结构(如year、month、day、seconds、nanos),ISO字符串格式则需自定义适配器,字段名不匹配会静默回退为默认值并可能触发DateTimeException;Gson 2.14.0已恢复对这些类的支持。Gson目前处于维护模式,仅提供缺陷修复与安全更新。
#gson#java模块系统#反射#json反序列化#record类型
$ more
Baeldung

Gson反序列化与InaccessibleObjectException异常处理指南

Java 9起通过JPMS模块系统强化封装,Gson依靠反射访问私有字段时会抛出InaccessibleObjectException。文章在模块化项目中复现该问题,并给出四种解决方案:将字段改为public、在module-info.java中用opens将包开放给com.google.gson、为POJO实现TypeAdapter(需借助公共API创建对象)、以及在无法改动源码时使用JVM参数--add-opens。记录类(record)自Gson 2.10起改用规范构造器,可开箱即用地反序列化。Gson 2.14.0恢复了对java.time类的支持,但需使用与私有字段同名的嵌套结构(如year/month/day、seconds/nanos),ISO格式字符串仍需自定义TypeAdapter;若字段名不匹配会静默取默认值0,从而引发DateTimeException。结论是优先选择opens开放访问或改用record。
#gson#json反序列化#java模块系统#反射#java.time
$ more
Spring Blog

Spring 周报 - 2026年9月15日

本期Spring周报由作者在旧金山撰写,汇总最新Spring生态资讯:推荐Ron Pressler关于Java内存管理原则的演讲,介绍Craig Walls的Spring AI聊天记忆摘要实践,并分享使用Spring Security和OAuth 2.0保护JavaFX应用的教程;还涉及OAuth 2.1与Spring Authorization Server、Spring与Gemini视频理解、新Java AI库Quixotic.ai、Netflix工程师Paul Bakker的播客访谈、Spring Batch IntelliJ插件、Spring Batch处理千万行数据扩展方案,以及用Spring调试器调试Spring Boot应用的文章。
#spring#java#spring ai#oauth 2.1#spring batch
$ more
InfoQ Java

Java新闻汇总:OpenJDK新JEP提案、CDI 5.0、Spring、Open Liberty、RefactorFirst与Kotlin版ADK

本期Java新闻汇总聚焦2026年9月7日当周的重要动态:OpenJDK新增有关提前编译(AOT)与结构化并发的JEP提案;Jakarta CDI 5.0和面向Kotlin的ADK 1.0正式发布;Open Liberty推出2026年9月版本;TornadoVM与RefactorFirst发布小版本更新;Micronaut发布维护版本;Groovy 6.0和Gradle 9.8的首个候选版本也已亮相。内容由Michael Redlich整理。
#java#openjdk#jakarta cdi#spring#kotlin
$ more
Jetbrains Blog

Toolbox App 3.8:改进 macOS 上的 IDE 更新处理并修复键盘导航

JetBrains 发布 Toolbox App 3.8 版本。该版本恢复了项目与工具列表的键盘导航,Windows 上可用 Ctrl+1 和 Ctrl+2 切换 Tools 与 Projects 标签,并支持方向键、Page Up、Page Down、Home、End 浏览列表。在 macOS 上,即使系统误报 IDE 安装目录不可写,手动 IDE 更新仍保持可用,若被阻止会显示解决说明。此外,清理残留 IDE 目录时现在显示每个工具及整体进度,清理和重新扫描完成前禁用删除控件,避免重复清理。
#jetbrains#toolbox app#ide更新#macos#键盘导航
$ more
Baeldung

解决Jackson异常:无法从对象值反序列化(缺少委托或基于属性的创建器)

本文介绍了Jackson在JSON反序列化过程中抛出InvalidDefinitionException的成因与解决方法。当Jackson无法确定如何创建目标类实例时,即使JSON结构与类字段完全匹配,也会报出“无法从对象值反序列化(无委托或基于属性的创建器)”错误。文章以包含有参构造函数的不可变类为例复现了该异常,并给出多种解决方案:一是为可变类添加无参构造函数,让Jackson先实例化再填充属性;二是通过@JsonCreator和@JsonProperty注解显式声明基于属性的创建器,从而在保持类不可变的前提下完成反序列化;三是将静态工厂方法标注为创建器;四是让Jackson自动发现构造函数参数名,例如在Jackson 2.x中注册ParameterNamesModule或已停止维护的ParanamerModule,并配合Java的-parameters编译选项。Jackson 3.x已将参数名发现功能内置并默认启用。文章还提醒注解需从com.fasterxml.jackson.annotation包导入,否则不会被识别。
#jackson#json反序列化#java#异常处理#注解
$ more
Baeldung

解决Jackson反序列化异常:无法从对象值反序列化(缺少委托或属性创建器)

本文介绍Jackson在JSON反序列化过程中抛出InvalidDefinitionException的原因及多种解决方案。当目标类只有带参构造函数、且Jackson无法确定如何将JSON属性映射到构造参数时,就会报出“无法从对象值反序列化(无委托或基于属性的创建器)”错误。文章以Jackson 2.17.2为例复现该异常,并给出修复思路:为可变类添加无参构造函数,由Jackson先实例化再填充属性;对不可变类使用@JsonCreator与@JsonProperty显式声明基于属性的创建器,静态工厂方法同样可以充当创建器;也可以借助ParameterNamesModule或ParanamerModule让Jackson自动发现构造参数名,前者需要以-parameters选项编译,Jackson 3.x已将参数名发现内置并默认启用。Paranamer已停止维护,仅支持Jackson 2.x。
#jackson#java#json反序列化#异常处理#注解
$ more