结合网上两篇博文

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失败了,则在进行读写操作时,会得到这个异常。