结合网上两篇博文
http://www.cnblogs.com/iteakey/p/4109983.html
http://blog.csdn.net/smith789/article/details/7174627
对项目中的遇到的异常进行分析:
2016-02-23 10:12:27,408 [3698334] ERROR - on.common.VelocityLayoutResult - Unable to render Velocity Template, '/WEB-INF/xx.vm' ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:339) at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392) at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263) at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106) at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:116) at java.io.OutputStreamWriter.write(OutputStreamWriter.java:203) at java.io.Writer.write(Writer.java:140) at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:430) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) at org.apache.velocity.Template.merge(Template.java:328) at org.apache.velocity.Template.merge(Template.java:235)
本地测试的时候,服务端经常报这个错误。当渲染某个vm文件时,出现了这个问题,从代码逻辑上看,这已经是渲染的最后一步了,数据本身应该也没有什么问题,为什么会抛出这个异常呢
结合mysql wait_timeout 原理,如果程序中的connection的timeout时间比mysql的wait_timeout还长,则在mysql发现connect很长时间没有使用并超过wait_timeout时,会主动与客户端断开连接,此时程序还不知道connect失败了,则在进行读写操作时,会得到这个异常。