一次tomcat应用升级失败的教训

一次tomcat应用升级失败的教训

今天短信发送供应商通知我们说,他们的服务器地址有修改,要求我们紧急修改。我看了下代码,修改点如下:

public static final String IP = "210.51.xxx.xxx";// 短信平台 IP

太简单了,心想才改一点点,没有必须重新打war包,于是就编译这个文件,生成Const.class,更新到现网。
于是开始了这次升级的悲剧:修改无论如何都没有生效,我重启tomcat, 比对修改的那个class文件,都无济于事。实在没有办法,就在调用的地方SendSms.java加个日志,看看怎么回事:

System.out.println("ip is: " + Const.IP);
HttpClientUtil util = new HttpClientUtil(Const.IP,  Const.PORT, "/mt/MT3.ashx");

执行发现,结果IP还是之前的老的值!!
于是反编译一下SendSms.java,发现代码并不是引用Const.IP, 而是直接替换成该值!
于是真相大白:final常量会被java编译器优化掉,直接在引用的地方替换成常量值!

教训:
* war升级最好是完整打包升级
* 如果升级想仅替换部分文件,不要仅仅编译修改过的源文件,而是整个项目编译打包后,可以对比变化过的class文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值