Ohhnews

分类导航

foojay

AI辅助的未使用与死代码移除

本文探讨了代码库中大量未使用和死代码如何导致AI编码助手性能下降(上下文浪费、幻觉增加、成本上升),并提出了一个实用工作流:使用Azul Intelligence Cloud的Code Inventory获取生产环境运行时证据,精确识别从未执行的代码,再借助AI编码代理(如Claude Code)安全地逐步删除这些代码及对应的测试。该策略不仅能提升AI辅助编码的效果,还能加速新员工入职、缩短构建测试周期,并降低长期维护成本。文中还讨论了季节性代码、错误处理代码等例外情况,强调基于生产数据的清理比静态分析更可靠。
#ai辅助#死代码移除#java#生产环境分析#代码清理
$ more
Baeldung

理解并避免Kafka中的CommitFailedException

本文介绍了Kafka消费者中常见的CommitFailedException异常,其根本原因是消费者在处理记录时超过了max.poll.interval.ms配置的时间,导致消费者被踢出消费者组,后续的偏移提交失败。文章通过示例代码演示了该异常的发生场景,并提供了几种解决方案:一是调整最大轮询间隔和批处理大小,为处理时间预留缓冲;二是采用异步处理方式,使用虚拟线程池异步处理记录,避免阻塞消费者轮询线程;三是实现ConsumerRebalanceListener,在分区重新分配时提交未完成的偏移,防止数据丢失。此外,还建议实施幂等性和DLQ(死信队列)等最佳实践。通过测试验证,这些方法能有效避免CommitFailedException。
#kafka#commitfailedexception#偏移提交#消费者组#异步处理
$ more
Baeldung

HQL中的正则表达式支持

Hibernate 7.2引入了like regexp操作符,允许在HQL中直接使用正则表达式进行字符串模式匹配,无需编写原生SQL查询。该功能将正则匹配委托给底层数据库引擎,但不同数据库(如H2、PostgreSQL、Oracle、MySQL)支持的正则表达式语法存在差异,导致模式的可移植性受限。文章通过Spring Boot示例展示了like regexp和not like regexp的使用方法,并探讨了其SQL翻译机制以及跨数据库的兼容性注意事项。
#hql#正则表达式#hibernate#数据库查询
$ more
Baeldung

Spring框架中的Bean后台初始化

概述 本文介绍了Spring框架中通过@Bean(bootstrap = BACKGROUND)实现Bean后台初始化的方法,旨在减少应用启动时的阻塞,提升启动性能。文中详细阐述了同步初始化模型的瓶颈、后台初始化的机制(异步委托、依赖协调、生命周期保持)、示例配置(如ProductCatalogInitializer模拟耗时初始化)、以及通过ObjectProvider实现安全注入。实验表明,后台初始化能将耗时任务移出主启动线程,使应用更早可用,尤其适合缓存预热、连接池建立等非关键Bean。
#spring框架#bean初始化#后台初始化#异步处理#容器启动
$ more
Baeldung

使用jCasbin进行授权

概述 本文介绍了 jCasbin——Apache Casbin 的 Java 官方移植版,用于在 Java 应用中实现访问控制。jCasbin 通过配置模型和策略数据分离的方式工作,支持 ACL(访问控制列表)和 RBAC(基于角色的访问控制)等标准模型。文章详细说明了如何添加依赖、创建 Enforcer 实例(支持从文件或数据库加载模型和策略)、使用 enforce() 方法检查权限,并演示了 ACL、超级用户和 RBAC 的配置方式。此外,还介绍了管理 API,包括查询主体/对象/操作、管理角色与权限等。jCasbin 提供灵活的访问控制解决方案,适用于多种应用场景。
#jcasbin#casbin#访问控制#rbac#授权
$ more
Baeldung

Hibernate @EmbeddedTable 注解指南

本文介绍了 Hibernate 7.2 中新增的 @EmbeddedTable 注解,提供了一种比传统 @AttributeOverride 更简洁的方式,将嵌入对象的所有字段自动映射到指定的次级表,避免逐个字段覆盖的冗长代码。文章通过 Person 和 Address 的实体示例展示了具体用法,并指出该注解为 Hibernate 专有(非 Jakarta Persistence 标准)且仍处于孵化阶段,仅适用于顶层嵌入对象。
#hibernate#嵌入式映射#注解#数据持久化#表映射
$ more
foojay

原生Linux、Apple Watch、游戏构建器与崩溃保护

本周亮点 Codename One 本周发布了多项重大更新: 原生Linux桌面移植:通过GTK3、Cairo等实现,无需JVM,生成独立ELF二进制文件,支持x64和arm64。 Apple Watch与Wear OS支持:watchOS使用Core Graphics渲染后端,Wear OS复用Android管道,同一Java代码可适配不同平台。 可视化Game Builder:基于高级游戏API的关卡编辑器,支持拖拽布局、标签属性,并即将推出三部分教程(包括2D平台游戏、纸牌游戏、3D地牢)。 崩溃保护系统:自动符号化原生崩溃栈,写入GitHub Issue,支持重试和去重,本地清理敏感信息。 此外,构建云进行了彻底重构,提升隔离性和安全性;Initializr迁移至JavaScript端口。
#codename one#原生linux#apple watch#游戏构建器#崩溃保护
$ more
Baeldung

Java周刊第652期

本期Java周刊聚焦AI辅助开发的前沿趋势,重点介绍了“代理工具”(agent harness)概念,这是一种能够快速生成、运行、检查、纠正代码并持续循环的系统,使AI从“令人印象深刻”变得“真正有用”。Spring AI 2.0发布了自纠正结构化输出功能。其他亮点包括:Block 450个JVM仓库迁移为monorepo以减少依赖漂移、JDK旧版本迁移建议、Kotlin Toolchain 0.11更新、Pi4J简化传感器与硬件集成、Eclipse基金会AI编码工作坊总结,以及Netflix使用Kueue简化批处理计算、AI视频编辑研究等。版本更新方面:Spring Boot 3.5.16、Spring Data 2025.0.13、Quarkus多版本紧急修复CVE-2026-50559、Vert.x 5.1.3、Elasticsearch 8.19.17/9.3.6、Zuul v3.6.16、Micronaut Core 5.1.2、Helidon 3.2.18、WildFly 40.0.1。本周精选文章《旧软件之所以快,是因为别无选择》引发对性能与资源约束的思考。
#java#人工智能#软件开发#spring#技术周刊
$ more
Jetbrains Blog

JetBrains 在 IntelliJ IDEA 2026.2 中开源 LSP 客户端 API

开源 LSP 客户端 API JetBrains 宣布将在 IntelliJ IDEA 2026.2 中开源 LSP(Language Server Protocol)客户端 API,使基于 IntelliJ 平台的产品(包括 Android Studio)都能使用该功能。此前,LSP 集成是商业 IDE 扩展,开源平台无法直接使用,导致插件作者需要自行实现客户端。本次开源提供了稳定且经过实战检验的平台客户端。 API 名称变更 为避免混淆,API 名称将进行调整:LspServer 改为 LspClient,LspIntegrationProvider 取代原有 provider。这些变更将在 2026.1.4 稳定版中提前生效。 建议 已有 JetBrains LSP API 的插件作者需关注更新并调整命名。 使用 LSP4IJ 或自定义客户端的插件无需立即迁移,需评估版本兼容性、功能覆盖等。 新语言集成可参考 IntelliJ Platform SDK 文档中的 LSP 指南。
#lsp#intellij idea#开源#api#jetbrains
$ more
foojay

侏罗纪JDK:迁移还是灭绝

文章作者分享了一年半迁移15个生产项目的经验,强调不应从JDK 7直接跳到21,而应逐LTS版本升级(7→8→11→17→21→25)。详细介绍了每个跳跃的关键变化:JDK 8→11时Java EE模块移除需手动添加依赖;JDK 11→17时Jigsaw模块系统限制反射访问;JDK 17→21时Hibernate 6带来大量不兼容改动,包括@Type重写、IdGeneratorStrategyInterpreter删除等;JDK 21→25时引入Virtual Threads和模式匹配等新特性。推荐使用OpenRewrite自动化重构、jdeprscan检查弃用API、Maven Enforcer锁定版本。强调迁移需分四阶段:库存扫描、依赖清理、逐跳升级、重复迭代,并建议从最小服务开始。指出不迁移的真实成本:安全漏洞、新员工学习成本、现代库无法使用、未来迁移难度增大。
#jdk迁移#java升级#遗留系统#hibernate#openrewrite
$ more