之前的项目(假设名字为项目A)使用javax.mail发邮件,,后来因项目需要加了org.apache.ws.commons.axiom包和org.apache.axis2包导致发邮件乱码。 因项目进度原因及解决java冲突需花费较长时间,,故调用其它项目(假设项目为项目B)接口来代发邮件。由此发现一个诡异的乱码问题!
一开始项目A的邮件是正常的,后来出现邮件标题中文乱码,登录项目B服务器重启tomcat,编码问题又消失了,过段时间又再次出现乱码。原因肯定是项目或服务器有变动引起的。项目A发邮件这部分一直没变动,项目B基本也没变动过,服务器配置也没变动过,唯一有变动的是项目B的服务器增加了定时重启tomcat的脚本。查看项目B服务器的日志,发现中文都显示了问号。经过与运维同学的排查发现了问题的所在
当用户登录了linux服务器后,会获取到当前系统的编码,后续其它操作都会使用到该编码,这时重启tomcat后项目恢复正常;而定时重启tomcat的脚本中并没有指明编码,故每次重启tomcat后系统的编码就出现问题;
解决方法是:在定时重启tomcat脚本中指定编码