本人做了近三年的J2EE开发工作,主要架构为SSH+MySQL+Tomcat,项目中也用到了一些第三方的开源工具或者中间件,工作中难免会遇到各种各样的异常问题,对于一些给我造成比较大的麻烦的问题,我习惯将他们和解决方案记录下来,以免下次遇到时再次东搜西找。这些问题有些可能并不是多难的技术问题,而只是容易被我们忽略而不易察觉的小问题,但是正因为不易察觉,它们往往会耗费我们比较多的时间,这点我相信很多同行都会有同感,因此,我觉得这个习惯相当有用,建议做开发的朋友都有一个自己的异常记录,并能够分享出来,惠及大家。以下是我工作中遇到过的一些异常,共36种:
1. HttpClient I/O exception:
错误信息:I/O exceptioncaught when processing request:Connection timed out:connect
错误原因:IP不正确。
解决方法:改正IP
2. Ambiguous handler methods mapped
错误信息:java.lang.IllegalStateException: Ambiguoushandler methods mapped for HTTP path '/lowpressure.json'
Ambiguous:模糊不清的,有歧义的
错误原因:项目中存在两个相同的RequestMapping路径
解决方法:修改其中一个名称
3. session read-only
错误信息:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO orremove 'readOnly' marker from transaction definition.
错误原因:开启了openSessionInViewFilter,而这种session的默认模式是只读。
解决方法:为其设置初始化参数singleSession=false。
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
4. org/hibernate/exception/DataException
错误信息:
javax.servlet.ServletException:java.lang.NoClassDefFoundError:org/hibernate/exception/DataException
Caused by: java.lang.NoClassDefFoundError:org/hibernate/exception/DataException
错误原因:不明。好像是因为开启了openSessionInViewFilter(你可能不信,但确实是这样!)
解决方法:关闭openSessionInViewFilter
5. Initializing connection provider:
异常信息:Initializing connection provider:
org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
Tomcat启动时长时间停留在此处
原因:不明!
解决方法:自愈!
6. www.highcharts.com/errors/13
错误信息:
uncaught exception: Highcharts error #13: www.highcharts.com/errors/13
highcharts画趋势图时firebug捕捉到异常!
错误原因:highchairs官网给出原因
Rendering div not found
This error occurs if the chart.renderTo option ismisconfugured so that Highcharts is unable to find the HTML element to renderthe chart in.
解决方法:配置chart.renderTo为一个存在的div的id。
7. C3p0获取连接失败
错误信息:java.sql.SQLException: An attempt by a clientto checkout a Connection has timed out
错误原因:客户端从连接池中获取连接超时,通常是因为连接池中连接达到最大数量,且都被取走还未归还,出项这一现象的原因有两种:一是连接最大数配置过小不够并发使用,二是程序中存在连接泄露,有使用后未归还处。
解决方法:排查有无连接未close,若没有则增加最大连接数量!
8. org.hibernate.NonUniqueObjectException
错误信息:a differentobject with the same identifier value was already associated with the session:
错误原因:这个错误产生原因是因为在hibernate中同一个session里面有了两个相同标识但是不同实体的对象.比如通过hibernate从数据库中查出一个对象A,有手动new了一个新的对象B,并且付给B与A相同的标识符,再通过hibernate保存B,这样就在session里同时存在A和B这两个相同标识符但不同的对象。
解决方法:方法1,保存B之前,调用一下session.clear(),清空一下当前session,但此方法不适合在一次需要保存多个对象时,不推荐使用!
方法2,在保存B之前,清除一下session中A对象,只清除A对象,调用session.evict(A)即可;
方法3,通过调用session.merge(B),这样会用B去更新库中的A,但不会把B持久化,session中就不会同时存在A和B
方法4,把B对象的属性值都set到A中,然后还保存A即可。
几种方法根据业务需要选择使用,如无特殊需要,推荐采用第三种方法。
9. doesnot contain handler parameter named 'method'
错误信息:Request[/patientSelfAction] does not contain handlerparameter named 'method'. This may becaused by whitespace in the label text.
10. Socket异常1:Address already in use: JVM_Bind
该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。
11. Socket异常2: Connection refused: connect
该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。
12. Socket异常3: Socket is closed
该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。
13. Socket异常4: Connection reset
该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
14. Socket异常5: Broken pipe
该异常在客户端和服务器均有可能发生。在第4个异常的第一种情况中(也就是抛出SocketExcepton:Connect reset by peer:Socket write error后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。
15. 视图转储为sql后无法导入
使用navicat工具导出数据库为sql文件后,其中视图的sql语句中有以下内容:
DROP VIEW IF EXISTS `bloodpressure`;
CREATE ALGORITHM=UNDEFINEDDEFINER=`root`@`` SQL SECURITY DEFINER VIEW `bloodpressure` AS....
其中DEFINER的值中@后面应该是数据库所在主机的IP地址,通过可视化工具建立连接后执行sql语句的话,可以直接使用localhost或者127.0.0.1即可,即DEFINER=`root`@`localhost`
16. 完全卸载MySQL
由于各种原因需要重装MysSQL,通常会遇到原来的配置信息卸载不干净而引起重装失败的现象。那么如何才能确保MySQL卸载干净呢?如果你是通过控制面板的“添加和删除程序”来卸载MySQL的话,那么你还需要进行以下两步操作:
1、删除原数据信息,即删除C:\Documents and Settings\All Users\Application Data路径下的MySQL文件夹,有时改文件夹可能被隐藏,通过选择“工具”下的“文件夹选项”,点击“查看”,选择“隐藏文件和文件夹”下的“显示所有文件和文件夹”,就可以显示出来了。
2、删除注册表信息,运行regedit命令,以此展开,删除里面的MySQL文件夹,有几个地方:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL
17. java.lang.OutOfMemoryError:Java heap space
引起java.lang.OutOfMemoryError: Java heap space异常,可能是由JAVA的堆栈设置太小的原因
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
根据网上的答案大致有以下三种解决方法:
1、在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms200m-Xmx512m
注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms200m -Xmx512m没起作用
2、在Eclilpse中修改启动参数,在VM arguments加入了-Xms200m -Xmx512m,设置如下图所示
3、 可以在windows 更改系统环境变量,加上JAVA_OPTS=-Xms64m-Xmx512m
18. webService 异常:The endpoint reference (EPR) for the Operation not found is :
The endpoint reference (EPR) for the Operation not found is/EMRServer/services/BloodpressureService/getBloodpressure
错误原因:找不到资源。可能是service名称不存在,或者方法名称错误等原因
19. org.apache.axis2.deployment.DeploymentException
最近在做axis2,开始运行正常,今天加入spring AOP 后,出现下面的异常
org.apache.axis2.deployment.DeploymentException:The following error occurred during schema generation:
Unable to load bytecode for classcom.cmcc.emr.common.Controller.BloodpressureController
网上找资料看了之后,发现是由于axis2不能参与事务管理,而我的写的service又刚好符合pointcut,所以报错了,后来把pointcut改写了一下,就不会报错了,
结论:service服务不能配置为切入点。
20. Sql语句优化(嵌套子查询)
Sql in 语句 效率奇低(ExecutionTime : 24 s)
SELECT phone FROM runmessage WHERE encounterDatetime IN (SELECT MAX(encounterDatetime) FROM runmessageWHERE DATE(encounterDatetime)='2013-07-19' GROUPBY email) ORDER BY steps DESC LIMIT 0,10;
优化后:效果显著(Execution Time : 3 s)
SELECT * FROM (SELECT MAX(encounterDatetime) ASencounterDatetime,phone,steps,email FROM runmessage WHEREDATE(encounterDatetime)='2013-07-19' GROUPBY email) AS tempMessage ORDER BY tempMessage.steps DESC LIMIT 0,10;
21. registered the JDBC driver butfailed to unregister it
Tomcat关闭时报出警告:
严重: The webapplication [/EMRServer] registered the JDBC driver [com.mysql.jdbc.Driver] butfailed to unregister it when the web application was stopped. To prevent amemory leak, the JDBC Driver has been forcibly unregistered.
原因未知。
22. Caused by:java.lang.NoClassDefFoundError: org/hibernate/exception/DataException
错误原因:hibernate通过Hql语句进行数据库操作时,hql语句中的字段拼写错误,导致无法识别,报出此异常。比如,如果from后面写的是实体类名,后面的字段就必须是类的属性,而不能是表字段的名称。切记!!!
23. IllegalStateException: Couldnot find @PathVariable [startTime] in @RequestMapping
异常信息:org.springframework.web.util.NestedServletException:
Request processing failed; nested exceptionisorg.springframework.web.bind.annotation.support.HandlerMethodInvocationException:Failed to invoke handler method [publicorg.springframework.web.servlet.ModelAndViewcom.cmcc.emr.restful.Controller.BloodSugarController.findBloodsugar(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)throws java.lang.Exception]; nested exception isjava.lang.IllegalStateException:Could not find@PathVariable[startTime] in @RequestMapping
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.cmcc.emr.Util.LoginFilter.doFilter(LoginFilter.java:27)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
错误原因:
最近在使用restful规范实现webService,发现这个非常奇怪的异常!明明存在@PathVariable[startTime]这个参数,但却一直报:Couldnot find!
两个接口如下:
Post接口:
@RequestMapping(method=RequestMethod.POST, value="/bloodSugars/{idcard}/{encounterDatetime}/{beforemeal}/{aftermeal}/{appType}")
public void insertBloodSugar(@PathVariable String idcard,@PathVariable StringencounterDatetime,
@PathVariable String beforemeal,@PathVariable String aftermeal,@PathVariable StringappType,
HttpServletRequestrequest,HttpServletResponse response) throws Exception{
…
}
Get接口:
@RequestMapping(method=RequestMethod.GET, value="/bloodSugars/{idcard}/{startTime}/{endTime}/{startNum}/{offset}")
public ModelAndView findBloodsugar(@PathVariable String idcard,@PathVariable StringstartTime,@PathVariable String endTime,
@PathVariable StringstartNum,@PathVariable String offset)throws Exception{
…
}
Post接口调用正常,但是调用Get接口时,就一直报上面的这个异常,百思不得其解!!
后来各种观察,各种测试,发现当两个方法参数个数不同时,都可以正常运行,因此怀疑是restful 没能把post 和 get 方法区分清除,导致查找失败,后又做了几个测试,证明确实如此,不仅是get和post,put方法也是一样,只要参数个数相同,都会去匹配post注解下的方法,如果两个方法参数名称不同,结果就会出现Could not find @PathVariable,不明白问什么会出现这种现象,注解@RequestMapping的保留策略也是runtime的!待查。。。
24. Tomcat7与ActiveMQAjaxServlet不兼容问题
Tomcat6上使用ActiveMQ AjaxServlet时,完全没有问题
但是,Tomcat7使用ActiveMQ AjaxServlet时,发生Not supported. exception
网上搜索了很多方案,都说只要对AjaxServlet加上async-supported支持就可以了。
但是,实际结果还是报同样的异常。
经过长时间的尝试,终于找到问题的原因了。
原来消息请求在AjaxServlet处理前,会先被filter先处理,所以filter也要加上async-supported支持。
具体配置代码如下:
web.xml
<!-- ActiveMQ servlet --><servlet><servlet-name>AjaxServlet</servlet-name><servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>AjaxServlet</servlet-name><url-pattern>/amq/*</url-pattern></servlet-mapping><!-- 著名 Character Encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><!-- 强制进行转码 --><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- ActiveMQ --><filter><filter-name>session</filter-name><filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class><async-supported>true</async-supported></filter><filter-mapping><filter-name>session</filter-name><url-pattern>/*</url-pattern></filter-mapping>
25. unknown protocol: c
项目部署在tomcat下,启动的时候报错: java.net.MalformedURLException: unknown protocol: c at java.net.URL.<init>(URL.java:574) at java.net.URL.<init>(URL.java:464) at java.net.URL.<init>(URL.java:413) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)...
这个错一般有两种原因导致: 1、URL协议、格式或者路径错误,好好检查下你程序中的代码 如果是路径问题,最好不要包含中文路径,因为有时中文路径会乱码,导致无法识别 Tomcat 不要安装在有中文或空格的路径下。 2、jar问题:用jdom解析xml文件,如果应用路径里有gnujaxp.jar包的话,jdom就会 调用它去解析xml文件,导致上述异常的出现。 如果是这个问题,解决方法:在应用路径里去掉对gnujaxp.jar包的引用。
26. Unsupported major.minor version51.0
问题产生的原因:用jdk7编译的class文件放到基于jdk6运行在tomcat之中,就会报这个错。
解决起来也很方便:打开eclipse中项目上的属性—java compiler–选择一个合适的版本后重新编译即可。
具体步骤
解决:项目------>右键------>属性------>Java Compiler------>Compiler Compliance Level------>选择你使用的JDK版本------>应用。
总结:不同的JDK版本使用的major.minor不同,所以会导致这个错误。在项目中要使用当前电脑配置的JDK版本,切忌张冠李戴。
知识扩充:major.minor version,它相当于一个软件的主次版本号,只是在这里是标识的一个Java Class的主版本号和次版本号。
JDK1.7 51.0
JDK1.6 50.0
JDK1.5 49.0
JDK1.4 48.0
总之问题的根由是低版本的 JVM 无法加载高版本的 class 文件造成的,找到高版本的 class 文件处理一下就行了。
27. Can not issue data manipulationstatements with executeQuery()
Can not issue data manipulation statementswith executeQuery().
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
atcom.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:413)
atcom.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1336)
atcom.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
atcom.cmcc.util.C3p0Utils.executeQuery(C3p0Utils.java:147)
错误原因:
使用executeQuery()方法执行了update,insert,delete等语句
28. Hibernate中常见的异常
本文总结Hibernate中常见的异常。
1. net.sf.hibernate.MappingException
当出现net.sf.hibernate.MappingException: Errorreading resource:…异常时一般是因为映射文件出现错误。
当出现net.sf.hibernate.MappingException:Resource: … not found是因为XML配置文件没找到所致,有可能是放置目录不正确,或者没将其加入hibernate.cfg.xml中。
2. net.sf.hibernate.PropertyNotFoundException
当出现net.sf.hibernate.PropertyNotFoundException:Could not find a setter for property name in class …时,原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。
3. org.hibernate.id.IdentifierGenerationException
当出现org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling save():异常时,一般是因为<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置引起。
解决方案:<id>元素映射了相应数据库表的主键字段,对其子元素<generatorclass="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hibernate参考文档,一般取其值为native 。具体可参考2.2.2.1小节。
4. a different object with the same identifier value was alreadyassociated with the session
当出现a different object with the same identifiervalue was already associated with the session时,一般是因为在hibernate中同一个session里面有了两个相同标识但是是不同实体。
有如下几种解决方案:
(1)使用session.clean(),如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Found two representationsof same collection"异常。
(2)使用session.refresh(object),当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。
(3)session.merge(object),Hibernate里面自带的方法,推荐使用。
5. SQL Grammer Exception,Could not execute JDBC batch update
当出现SQL Grammer Exception,Could not executeJDBC batch update异常时,一般是由如下问题引起:
(1)SQL语句中存在语法错误或是传入的数据有误;
(2)数据库的配置不合法,或者说是配置有误。较容易出现的有数据表的映射文件(,hbm.xml文件)配置有误;Hibernate.cfg.xml文件配置有误;
(3) 当前的数据库用户权限不足,不能操作数据库。以是以Oracle 数据库为例,这种情况下在错误提示中会显示java.sql.BatchUpdateException: ORA-01031: insufficient privileges这样的信息。
针对上面的各种原因,开发人员可以找出对应的解决方案。
29. teamviewer现在无法捕捉屏幕,这可能是由于快速的用户切换或远程桌面会话已经断开
这个问题蛮简单,如果你用“远程桌面”连过去开启teamview的话,当你退出“远程桌面”后,外网用teamview连接就会出现这个问题, 解决方法: 不用远程连接过去开启teamview,直接在在电脑本机上手动开启teamview就可以了
已验证!
30. does not contain handler parameter named 'method'. This may be caused by whitespace in the label text.
Struts1中 action这样配置的话:
<actionpath="/login" name="loginForm"parameter="method"
type="org.springframework.web.struts.DelegatingActionProxy">
页面访问时:正确方式是:/login.do?method=xxx ,如果以 /login.do 访问就会报此异常
31. java.lang.OutOfMemoryError:PermGen space PermGen space
一、 java.lang.OutOfMemoryError:PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen
space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M-XX:MaxPermSize=128m
二、 Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说setJAVA_OPTS=-Xms128m -Xmx350m没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftware Foundation\Tomcat Service
Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat5.0\common\endorsed"
-Xrs
加入 -Xms300m-Xmx350m
重起tomcat服务,设置生效
32. MySQL server version for theright syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT'
You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax to use near'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
原因:
项目中我用的jdbc驱动版本
mysql-connector-java-5.1.15.jar
mysql数据库版本为5.6
jdbc在连接数据库时候会发送测试语句SETOPTION SQL_SELECT_LIMIT=DEFAULT
这在mysql5.6以下版本是可以的,但是5.6不再支持SET...
由于5.6这个变化,导致一些旧的软件可能运行出错。mysql官方也不承认这是bug,只能升级你的Mysql驱动来解决。
目前所知:mysql-connector-java-5.1.15.jar及以前版本不可以,
mysql-connector-java-5.1.25.jar及之后版本可以
解决方法:
升级驱动版本,我改成了mysql-connector-java-5.1.25.jar
33. Error creating bean with name'patientService': Injection of autowired dependencies failed;
Caused by:org.springframework.beans.factory.BeanCreationException: Could not autowirefield: public com. flex.dao.JdbcDaocom.cmcc.flex.service.PatientService.jdbcDao; nested exception isorg.springframework.beans.factory.NoSuchBeanDefinitionException: No matchingbean of type [com.flex.dao.JdbcDao] found for dependency: expected at least 1bean which qualifies as autowire candidate for this dependency. Dependencyannotations:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
不能创建bean,因为自动注入失败。出现此异常的原因是:注解扫描配置顺序错误,或者配置冲突,请检查各个引入的xml文件中是否有重复配置。参考配置如下:
<context:component-scanbase-package="com.test"/>
<!-- enable autowire -->
<context:annotation-config/>
<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven/>
34. java.io.IOException: Cannot runprogram "C:\analyze": CreateProcess error=5
java程序通过Runtime.getRuntime().exec()方法调用C程序可执行文件,报此异常。
最后的解决方法是:把jdk的版本从7换成了6,一切就正常了,哎!!
35. 打成jar包后,注解无法扫描的问题
解决方法:export jar的时候,勾选add directory entries
36. ava.io.EOFException错误
Tomcat启动后报:IOException while loading persistedsessions: java.io.EOFException错误
出现原因:tomcat对保存硬盘的session读取失败
解决方法:打开TOMCAT的安装目录,在WORK文件夹找到Catalina\localhost\你的工程名所在文件夹下, 把里面的session.ser删除即可,或者直接清空localhost