Apache Ignite REST API时间戳格式配置咨询(版本升级后格式变更)
问题解答
可以通过配置Ignite的自定义时间戳格式化器来统一REST API的时间输出格式,解决版本升级后格式变化的问题。
问题原因
Ignite 2.7.6(Java 8)与2.13(Java 11)之间,时间戳格式化逻辑出现差异:要么是Java版本升级后SimpleDateFormat/DateTimeFormatter的本地化默认行为改变,要么是Ignite自身在新版本中调整了默认的时间格式化实现,最终导致年份后多了一个逗号。
解决方法
1. 自定义时间戳格式化器
实现Ignite的TimestampFormatter接口,强制指定你需要的格式(比如MMM dd, yyyy hh:mm:ss a,对应旧版本的输出样式),然后在Ignite配置中注册这个自定义类。
自定义格式化器代码示例:
import org.apache.ignite.internal.processors.rest.protocols.http.jetty.TimestampFormatter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class CustomRestTimestampFormatter implements TimestampFormatter { // 匹配Ignite 2.7.6的时间格式 private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a", Locale.US); @Override public String format(long timestamp) { // SimpleDateFormat非线程安全,需同步处理 synchronized (DATE_FORMAT) { return DATE_FORMAT.format(new Date(timestamp)); } } }
在Ignite配置中注册:
- XML配置方式:
<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <!-- 其他配置项 --> <property name="timestampFormatter"> <bean class="com.your.package.CustomRestTimestampFormatter"/> </property> </bean>
- Java代码配置方式:
import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.Ignition; public class IgniteStartup { public static void main(String[] args) { IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setTimestampFormatter(new CustomRestTimestampFormatter()); Ignition.start(cfg); } }
2. 系统属性配置(部分版本支持)
如果不想编写自定义类,可以尝试通过启动参数指定时间格式(需确认Ignite 2.13是否支持该属性):
# 启动Ignite时添加JVM参数 -Dignite.rest.timestamp.format="MMM dd, yyyy hh:mm:ss a"
注意事项
- 自定义格式化器时,注意
SimpleDateFormat的线程安全性问题,建议使用同步块或者线程安全的DateTimeFormatter(Java 8+推荐)。 - 如果使用
DateTimeFormatter,可以替换示例中的SimpleDateFormat为:
private static final DateTimeFormatter FORMAT = DateTimeFormatter.ofPattern("MMM dd, yyyy hh:mm:ss a", Locale.US); @Override public String format(long timestamp) { return FORMAT.format(Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).toLocalDateTime()); }
内容的提问来源于stack exchange,提问作者Dren Butković
相关产品推荐
相关产品推荐

