You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.5升级后GitLab流水线测试中调用log.info()出现TemporalAccessor为null的NullPointerException问题求助

Spring Boot 3.5升级后GitLab流水线测试中调用log.info()出现TemporalAccessor为null的NullPointerException问题求助

问题描述

我最近将项目升级到Spring Boot 3.5.3(此前版本为3.4.4),同时同步升级了一批依赖库,结果在GitLab流水线的测试阶段执行log.info()时触发了NullPointerException,但本地运行完全正常。项目中使用Lombok的@Slf4j注解来生成日志实例。

本次升级的关键依赖项包括:

  • Spring Boot父依赖:org.springframework.boot:spring-boot-starter-parent 从3.4.4 → 3.5.3
  • Spring Cloud版本:2025.0.0
  • AWS SDK相关版本:2.31.77
  • JSON库版本:org.json:json 20250517
  • Jacoco Maven插件:0.8.13
  • Commons CSV:1.14.0
  • Oracle JDBC驱动:从ojdbc8替换为ojdbc17
  • 还有部分父服务传递过来的依赖,若需要更细节的信息我可以进一步排查

流水线容器环境信息

Java version: 17.0.15, vendor: Amazon.com Inc., runtime: /opt/java
Apache Maven 3.9.9 (8e8579a9e***260186937)
Maven home: /root/.m2/wrapper/dists/apache-maven-3.9.9/34***f1
Java version: 17.0.15, vendor: Amazon.com Inc., runtime: /opt/java
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "5.10.238-231.953.amzn2.x86_64", arch: "amd64", family: "unix"

异常堆栈信息

2025-07-14T04:05:00.639470Z 01E java.lang.NullPointerException: Cannot invoke "java.time.temporal.TemporalAccessor.getLong(java.time.temporal.TemporalField)" because "this.temporal" is null
2025-07-14T04:05:00.639478Z 01E at java.base/java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:308)
2025-07-14T04:05:00.639480Z 01E at java.base/java.time.format.DateTimeFormatterBuilder$NumberPrinterParser.format(DateTimeFormatterBuilder.java:2763)
2025-07-14T04:05:00.639481Z 01E at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2402)
2025-07-14T04:05:00.639483Z 01E at java.base/java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1849)
2025-07-14T04:05:00.639484Z 01E at java.base/java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1823)
2025-07-14T04:05:00.639485Z 01E at ch.qos.logback.core.util.CachingDateFormatter.format(CachingDateFormatter.java:74)
2025-07-14T04:05:00.639486Z 01E at ch.qos.logback.core.util.StatusPrinter2.buildStr(StatusPrinter2.java:180)
2025-07-14T04:05:00.639487Z 01E at ch.qos.logback.core.util.StatusPrinter.buildStr(StatusPrinter.java:99)
2025-07-14T04:05:00.639488Z 01E at ch.qos.logback.core.status.OnPrintStreamStatusListenerBase.print(OnPrintStreamStatusListenerBase.java:56)
2025-07-14T04:05:00.639489Z 01E at ch.qos.logback.core.status.OnPrintStreamStatusListenerBase.addStatusEvent(OnPrintStreamStatusListenerBase.java:63)
2025-07-14T04:05:00.639490Z 01E at org.springframework.boot.logging.logback.SystemStatusListener.addStatusEvent(SystemStatusListener.java:71)
2025-07-14T04:05:00.639492Z 01E at ch.qos.logback.core.BasicStatusManager.fireStatusAddEvent(BasicStatusManager.java:86)
2025-07-14T04:05:00.639493Z 01E at ch.qos.logback.core.BasicStatusManager.add(BasicStatusManager.java:58)
2025-07-14T04:05:00.639494Z 01E at ch.qos.logback.core.spi.ContextAwareBase.addStatus(ContextAwareBase.java:80)
2025-07-14T04:05:00.639495Z 01E at ch.qos.logback.core.spi.ContextAwareBase.addError(ContextAwareBase.java:105)
2025-07-14T04:05:00.639496Z 01E at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:89)
2025-07-14T04:05:00.639497Z 01E at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
2025-07-14T04:05:00.639498Z 01E at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:272)
2025-07-14T04:05:00.639499Z 01E at ch.qos.logback.classic.Logger.callAppenders(Logger.java:259)
2025-07-14T04:05:00.639500Z 01E at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:426)
2025-07-14T04:05:00.639501Z 01E at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:386)
2025-07-14T04:05:00.639502Z 01E at ch.qos.logback.classic.Logger.info(Logger.java:584)
2025-07-14T04:05:00.639503Z 01E at com.myapp.services.MyService.doSomething(MyService.java:107)

触发异常的代码行(MyService.java:107):

log.info("Updating... request ");

已尝试的操作

  • 注释掉触发异常的log.info()语句后,该位置的报错消失,但下一处log.info()会触发完全相同的异常,显然无法通过注释所有日志语句来解决问题。

求助

有没有同学遇到过类似的问题?或者能帮我分析下可能的根因?比如是不是依赖冲突导致Logback的日期格式化组件出现了初始化异常?或者流水线环境的某些配置(比如编码、时区)和本地不一致引发的问题?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:34:32