说下背景,有个后端系统是基于sap平台,前端销售系统是基于java平台,两个平台之间交互需要通过中间件,这个中间件就是sapjco,这个网上有很多相关的资料,此处不多讲。这次发生的问题源于一个需求变更,很简单原来的接口数量是设定为整数,现在要改成支持3为小数(能够精确到小数点后三位)。
解决方法:给BigDecimal设置精度(当然你得在接口处做有效性检查,当前精度为3,传来四位小数怎么办)后重新打包发布,这边的应用服务器是用的was,通过控制台卸载原应用,发布新应用并启动就可以在dev环境测试了,从java平台传了三位整数过去(小数点后都是0),怪事发生了,sap接到的数据整数的三位到小数上了,检查各改动代码及测试的最终传值,没有错误!OK,我们本地测试是ok的,问题在哪? 比较下本地同dev,本地是tomcat,dev是was;本地发布是在IDE进行,中间会重启server,was是在控制台进行,没有server重启;好吧,我们来重启was server试试,果然,测试通过!
总结:重启server会销毁server在内存中的信息,重新启动后原java数据结构同sap数据结构的映射关系会重新加载并缓存,这是我个人的看法,这不是重点,重点是问题解决了,需求如期上线。