如何获取服务器时区?Apache NiFi服务器时区如何传入处理器?
查看服务器时区的方法
1. 操作系统层面
- Linux/Unix:执行命令
date +%Z快速查看时区缩写;或执行timedatectl获取完整时区配置信息。 - Windows:命令行执行
tzutil /g返回当前时区ID,也可通过控制面板「日期和时间」直观查看。
2. NiFi JVM层面(关键,因为NiFi基于Java运行)
- 直接在服务器终端执行:
java -XshowSettings:properties -version 2>&1 | grep user.timezone,输出结果即为NiFi运行依赖的JVM时区。 - NiFi UI内验证:添加
ExecuteGroovyScript处理器,运行脚本println System.getProperty("user.timezone"),启动处理器后查看日志即可获取时区值。
在Apache NiFi处理器中传入服务器时区
你尝试的${Duser.timezone}和#{-Duser.timezone}语法不正确,以下是正确实现方式:
- 使用NiFi表达式语言直接获取:NiFi原生表达式支持直接读取系统属性,正确写法为
${system:user.timezone}。在UpdateRecord处理器的「Record Path Value」中填入该表达式,即可将服务器JVM时区值写入记录字段。 - 通过Groovy脚本缓存时区属性:如果需要在多个处理器中复用时区值,可先用
ExecuteGroovyScript处理器将时区存入流文件属性:
后续在UpdateRecord中直接引用def timezone = System.getProperty("user.timezone") flowFile = session.putAttribute(flowFile, "server.timezone", timezone) return flowFile${server.timezone}即可。 - 修改NiFi默认时区(可选):若需统一NiFi时区,可在
nifi-env.sh(Linux)或nifi-env.bat(Windows)中添加配置JAVA_OPTS="-Duser.timezone=Asia/Shanghai"(替换为目标时区),重启NiFi后生效。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

