日志报错:
........
com.ibm.commerce.exception.ECSystemException: 处理期间发生以下 SQL 异常:“{0}”。
at com.suning.commerce.promotion.util.SNPromotionValidJDBCHelper.getFreeCouponAvailActs_ByScope(SNPromotionValidJDBCHelper.java:2612)
at com.suning.commerce.promotion.commands.SNFreeCouponDisplayTaskCmdImpl.getActsFromDB(SNFreeCouponDisplayTaskCmdImpl.java:461)
at com.suning.commerce.promotion.commands.SNFreeCouponDisplayTaskCmdImpl.getFreeCouponPromInfo(SNFreeCouponDisplayTaskCmdImpl.java:203)
at com.suning.commerce.promotion.commands.SNFreeCouponDisplayTaskCmdImpl.performExecute(SNFreeCouponDisplayTaskCmdImpl.java:145)
........
Caused by: com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Connection 已关闭。
at com.ibm.ws.rsadapter.jdbc.WSJdbcWrapper.createClosedException(WSJdbcWrapper.java:110)
原代码定位:
SNFreeCouponDisplayTaskCmd :
多处调用了该对象,如:
SNPromotionValidJDBCHelper:
问题分析:
private static SNPromotionValidJDBCHelper validJDBCHelper = new SNPromotionValidJDBCHelper();
在内存中仅有一份, 最后会执行 close(ResultSet rs, Statement stmt) 方法关闭连接,当并发时,当前一个执行了 close(ResultSet rs, Statement stmt) 方法,则后一个会报以上异常。因此 static变量要慎用!
对static的使用,也请大家给予指点。
例如:static方法会存在这中风险么????