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

Actuator info端点显示时间戳而非可读构建时间

解决Spring Boot Actuator Info端点构建时间可读性问题

问题原因

Spring Boot的BuildInfoProperties会将build.time解析为Instant类型,默认序列化时会转换为时间戳格式,而META-INF/build-info.properties中存储的原始ISO格式并不会直接在Actuator端点输出。

解决方案

方案1:自定义BuildInfoContributor(精准控制格式)

通过实现BuildInfoContributor接口,替换默认的构建信息贡献者,将时间格式化为可读的ISO字符串:

import org.springframework.boot.actuate.info.BuildInfoContributor;
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.buildinfo.BuildInfo;
import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.Map;

@Component
public class FormattedBuildInfoContributor implements BuildInfoContributor {

    private final BuildInfo buildInfo;

    public FormattedBuildInfoContributor(BuildInfo buildInfo) {
        this.buildInfo = buildInfo;
    }

    @Override
    public void contribute(Info.Builder builder) {
        Map<String, Object> buildInfoMap = new LinkedHashMap<>();
        buildInfoMap.put("group", buildInfo.getGroup());
        buildInfoMap.put("artifact", buildInfo.getArtifact());
        buildInfoMap.put("name", buildInfo.getName());
        buildInfoMap.put("version", buildInfo.getVersion());
        
        if (buildInfo.getTime() != null) {
            // 格式化为ISO-8601标准字符串
            buildInfoMap.put("time", DateTimeFormatter.ISO_INSTANT.format(buildInfo.getTime()));
        }
        
        builder.withDetail("build", buildInfoMap);
    }
}

启动应用后,Info端点的build.time会直接输出类似2023-10-25T14:54:05.717Z的可读格式。

方案2:全局配置Jackson序列化规则(简单高效)

通过配置Jackson,让所有Instant类型字段序列化为字符串而非时间戳,全局生效:

在application.yml中添加:

spring:
  jackson:
    serialization:
      write-dates-as-timestamps: false

或在application.properties中添加:

spring.jackson.serialization.write-dates-as-timestamps=false

此方法无需编写额外代码,所有日期类型都会以ISO格式字符串输出,包括build.time。

方案3:修改Maven插件生成格式化时间(构建时固化)

通过Spring Boot Maven插件的additionalProperties配置,在构建时直接生成格式化后的时间字段:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>build-info</goal>
                    </goals>
                    <configuration>
                        <additionalProperties>
                            <!-- 添加自定义格式化时间字段 -->
                            <build.time.formatted>${maven.build.timestamp}</build.time.formatted>
                        </additionalProperties>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <!-- 定义Maven时间戳格式 -->
    <properties>
        <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssXXX</maven.build.timestamp.format>
    </properties>
</build>

此方案会在build-info.properties中新增build.time.formatted字段,Info端点会自动展示该字段,原始time字段仍保留时间戳格式,适合需要同时保留两种格式的场景。

内容的提问来源于stack exchange,提问作者Leos Literak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:35:28