配置SpringMVC+Mybatis+SQLServer (2)——配置过程中常见问题

版权声明:本文为博主原创文章,转载请注明作者与出处,http://blog.csdn.net/lixingtao0520 https://blog.csdn.net/lixingtao0520/article/details/76599077

本文总结下在配置MaBatis过程中,遇到的各种问题。

1、异常:java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getNString(Ljava/lang/String;)Ljava/lang/String;

java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getNString(Ljava/lang/String;)Ljava/lang/String;
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:68)
     at com.sun.proxy.$Proxy22.getNString(Unknown Source)
     at org.apache.ibatis.type.NStringTypeHandler.getNullableResult(NStringTypeHandler.java:37)
     at org.apache.ibatis.type.NStringTypeHandler.getNullableResult(NStringTypeHandler.java:26)
     at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:66)
     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:501)
     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:384)
     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:338)
     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:313)
     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:286)
     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:183)
     at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
     at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
     at org.apache.ibatis.executor.ReuseExecutor.doQuery(ReuseExecutor.java:60)
     at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
     at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
     at com.sun.proxy.$Proxy7.selectOne(Unknown Source)
     at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:167)
     at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:82)
     at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
     at com.sun.proxy.$Proxy19.getStudentById(Unknown Source)
     at com.xtli.controller.Spring.StudentController.getStudent(StudentController.java:28)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
     ...
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:745)
解决办法:

(1)context.xml文件中的数据源增加属性

factory="org.apache.commons.dbcp.BasicDataSourceFactory"

<Resource auth="Container"

     driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

     logAbandoned="true"

     maxActive="100"

     maxIdle="20"

     maxWait="10000"
     name="jdbc/sqlServerMyUardb"

     password="123456"

     removeAbandoned="true"
     removeAbandonedTimeout="120"
     type="javax.sql.DataSource"
     url="jdbc:sqlserver://localhost:1433;DatabaseName=uardb"
     factory="org.apache.commons.dbcp.BasicDataSourceFactory"
     username="userName"/>


 (2) pom文件中增加以下依赖
<dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.4</version>
     </dependency>
    <dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

2、异常:java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
     at org.apache.ibatis.executor.ReuseExecutor.prepareStatement(ReuseExecutor.java:89)
     at org.apache.ibatis.executor.ReuseExecutor.doQuery(ReuseExecutor.java:59)
     at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
     at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386)
     at com.sun.proxy.$Proxy7.selectOne(Unknown Source)
     at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165)
     at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:82)
     at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
     at com.sun.proxy.$Proxy19.getStudentById(Unknown Source)
     at com.xtli.controller.Spring.StudentController.getStudent(StudentController.java:28)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     ...
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:745)

mybatis-spring.jar版本与Spring和mybatis版本不对,版本对应如下

MyBatis-Spring MyBatis Spring
1.0.0 and 1.0.1 3.0.1 to 3.0.5 3.0.0 or higher
1.0.2 3.0.6 3.0.0 or higher
1.1.0 or higher 3.1.0 or higher 3.0.0 or higher
1.3.0 or higher 3.4.0 or higher 3.0.0 or higher


3、 异常java.lang.AbstractMethodError:org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction;

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction;
     at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromConnection(DefaultSqlSessionFactory.java:118)
     at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:82)
     at org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:134)
     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333)
     at com.sun.proxy.$Proxy7.selectOne(Unknown Source)
 ...
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:745)
解决办法:
仍然是mybatis-spring.jar版本不对,参见2


4、异常java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
     at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:171)
     at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1090)
     at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1064)
     at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
     at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:559)
     at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
     at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4245)
     at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4886)
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4750)
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
     at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
     at org.apache.catalina.core.StandardService.start(StandardService.java:525)
     at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
     at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
解决办法:

web.xml文件中配置如下
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>
改为
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/applicationContext.xml</param-value>
    </context-param>

5、Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError:org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/myProject/WEB-INF/classes/applicationContext.xml]: Cannot resolve reference to bean 'sqlSessionTemplate' while setting bean property 'sqlSessionTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionTemplate' defined in URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/myProject/WEB-INF/classes/applicationContext.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/myProject/WEB-INF/classes/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329)
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417)
...
org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
     at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
     at org.apache.catalina.core.StandardService.start(StandardService.java:525)
     at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
     at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionTemplate' defined in URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/myProject/WEB-INF/classes/applicationContext.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/myProject/WEB-INF/classes/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329)
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
...
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
     ... 30 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/myProject/WEB-INF/classes/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1453)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
     ... 40 more
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:101)
     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1450)
     ... 48 more

解决办法:
缺少spring-jdbc-xxx.jar包,在pom.xml文件中引入spring-jdbc


  



猜你喜欢

转载自blog.csdn.net/lixingtao0520/article/details/76599077