Tomcat7升级到Tomcat9后DecimalFormat格式变化,不修改代码如何配置区域设置?
解决方案
Tomcat 9相较于Tomcat 7调整了默认区域设置(Locale)的读取逻辑,会优先继承操作系统的区域配置,new DecimalFormat()无参构造会默认读取JVM全局Locale决定数字分隔符样式,因此出现了小数点变为逗号的问题。无需修改应用代码即可通过调整Tomcat配置完成修复,可用方案如下:
方案1:全局配置JVM默认Locale(对当前Tomcat下所有应用生效)
这是最常用的方案,操作简单且无需修改应用包:
- 进入Tomcat安装目录的
bin文件夹 - 新建/编辑对应环境的配置文件:
- Linux环境:编辑
setenv.sh(如果文件不存在直接新建即可),添加如下内容:
export JAVA_OPTS="$JAVA_OPTS -Duser.language=en -Duser.country=US"- Windows环境:编辑
setenv.bat(如果文件不存在直接新建即可),添加如下内容:
set JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.country=US - Linux环境:编辑
- 保存文件后重启Tomcat即可生效。
方案2:单应用独立配置(不影响同Tomcat下其他应用)
如果仅需要修复当前升级的应用,不想改动全局配置,可以在Tomcat的应用上下文配置中单独指定Locale:
- 进入Tomcat安装目录的
conf/Catalina/localhost文件夹 - 新建和应用上下文同名的xml文件,比如应用访问路径是
/demo就新建demo.xml,添加如下内容:
<Context> <Parameter name="user.language" value="en" override="false"/> <Parameter name="user.country" value="US" override="false"/> </Context>
- 重启Tomcat后仅对当前应用生效。
注意:如果你的应用本身有适配多区域的需求,修改默认Locale可能会影响其他依赖Locale的逻辑,比如日期格式化、多语言文案展示等,建议修改后完成全量功能验证。
内容的提问来源于stack exchange,提问作者user14613717
相关产品推荐
相关产品推荐

