java.lang.IllegalStateException: No DataSource set

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Maybeno1314/article/details/81557807
八月 10, 2018 9:22:24 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [DispatcherServlet] in context with path [/spring.mvc] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No DataSource set] with root cause
java.lang.IllegalStateException: No DataSource set
	at org.springframework.util.Assert.state(Assert.java:73)
	at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:446)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456)
	at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:484)
	at com.zzxt.spring.mvc.hello.entity.BankDaoImpl.getAllCardInfo(BankDaoImpl.java:86)
	at com.zzxt.spring.mvc.hello.action.HelloController.sayHi(HelloController.java:33)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1152)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

八月 10, 2018 9:30:11 上午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/spring.mvc] has started
八月 10, 2018 9:30:11 上午 org.apache.catalina.core.ApplicationContext log
信息: Destroying Spring FrameworkServlet 'DispatcherServlet'
八月 10, 2018 9:30:11 上午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing WebApplicationContext for namespace 'DispatcherServlet-servlet': startup date [Fri Aug 10 09:22:11 CST 2018]; parent: Root WebApplicationContext
八月 10, 2018 9:30:11 上午 org.apache.catalina.core.ApplicationContext log
信息: Closing Spring root WebApplicationContext
八月 10, 2018 9:30:11 上午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing Root WebApplicationContext: startup date [Fri Aug 10 09:22:10 CST 2018]; root of context hierarchy
八月 10, 2018 9:30:11 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} closed
八月 10, 2018 9:30:11 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc
警告: The web application [spring.mvc] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
八月 10, 2018 9:30:11 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc
警告: The web application [spring.mvc] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
八月 10, 2018 9:30:11 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: The web application [spring.mvc] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.lang.Object.wait(Native Method)
 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
 com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:64)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 java.lang.Thread.run(Thread.java:745)
八月 10, 2018 9:30:14 上午 org.apache.jasper.servlet.TldScanner scanJars
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
八月 10, 2018 9:30:14 上午 org.apache.catalina.core.ApplicationContext log
信息: No Spring WebApplicationInitializer types detected on classpath
八月 10, 2018 9:30:14 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
八月 10, 2018 9:30:14 上午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization started
八月 10, 2018 9:30:14 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing Root WebApplicationContext: startup date [Fri Aug 10 09:30:14 CST 2018]; root of context hierarchy
八月 10, 2018 9:30:14 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-jdbc.xml]
八月 10, 2018 9:30:14 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
八月 10, 2018 9:30:14 上午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization completed in 422 ms
八月 10, 2018 9:30:14 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'DispatcherServlet'
八月 10, 2018 9:30:14 上午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'DispatcherServlet': initialization started
八月 10, 2018 9:30:14 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing WebApplicationContext for namespace 'DispatcherServlet-servlet': startup date [Fri Aug 10 09:30:14 CST 2018]; parent: Root WebApplicationContext
八月 10, 2018 9:30:14 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-mvc.xml]
八月 10, 2018 9:30:14 上午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/stu/showView]}" onto public org.springframework.web.servlet.ModelAndView com.zzxt.spring.mvc.hello.action.HelloController.sayHi()
八月 10, 2018 9:30:14 上午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/stu/add]}" onto public org.springframework.web.servlet.ModelAndView com.zzxt.spring.mvc.hello.action.HelloController.insertStu()
八月 10, 2018 9:30:14 上午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/stu/doAdd]}" onto public org.springframework.web.servlet.ModelAndView com.zzxt.spring.mvc.hello.action.HelloController.doInsertStu(com.zzxt.spring.mvc.hello.entity.DButil)
八月 10, 2018 9:30:15 上午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache
信息: Looking for @ControllerAdvice: WebApplicationContext for namespace 'DispatcherServlet-servlet': startup date [Fri Aug 10 09:30:14 CST 2018]; parent: Root WebApplicationContext
八月 10, 2018 9:30:15 上午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'DispatcherServlet': initialization completed in 440 ms
八月 10, 2018 9:30:15 上午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/spring.mvc] is completed
八月 10, 2018 9:30:16 上午 org.apache.catalina.loader.WebappClassLoaderBase checkStateForResourceLoading
信息: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
	at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1372)
	at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1042)
	at com.mysql.jdbc.AbandonedConnectionCleanupThread.checkContextClassLoaders(AbandonedConnectionCleanupThread.java:90)
	at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:63)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

我出现这个错误的原因是:我的applicationContext.xml中的配置出现了问题,

如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"

xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd
               http://www.springframework.org/schema/util
               http://www.springframework.org/schema/util/spring-util.xsd 
               http://www.springframework.org/schema/aop
               http://www.springframework.org/schema/aop/spring-aop.xsd ">
               
               
               
               
                
        		<!-- 
             <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
          
              <bean id="dbutil" class="com.zzxt.spring.jdbc.CardInfo">
              	<property name="stuNo" value="${stuNo}"></property>
              	<property name="stuName" value="${stuName}"></property>
              	<property name="age" value="${age}"></property>
              	<property name="classNo" value="${classNo}"></property>
              	<property name="gender" value="${gender}"></property>
              	 </bean>
               
        				创建一个jdbcTemplate bean 将dataSources 注入
        				
        				com.alibaba.druid.pool.DruidDataSource  ;连接池
        				
        		 -->
             
          <context:property-placeholder location="classpath:db-account.properties"></context:property-placeholder>
             
             
             <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
             	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
             	<property name="url" value="jdbc:mysql://localhost:3306/test;useSSL=false"></property>
             	<property name="username" value="root"></property>
             	<property name="password" value="root"></property>
             
             </bean>
             
              <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
              	<property name="dataSource" ref="dataSource"></property>
              </bean>
              
              <!-- 
              
              		DataSOurce 接口,为了从数据库中得到数据,需要获取一个数据库的连接,Spring通过DataSources对象来完成这个链接,
              		
              		DataSource 是JDBC规范的一部分
              		
              		他被视为一个通用的数据库连接工厂
              		
              		通过DataSource ,Container,Framework,可以将连接池及事务管理的细节从应用代码中分理出来
              		
              <bean id="bankDaoImpl1" class="com.zzxt.spring.jdbc.BankDaoImpl" >
              	<property name="jdbcTemplate" ref="jdbcTemplate"></property>
              </bean>
              
               -->
              		
              
              
              <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
             	<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
              
              </bean>
              
              <bean id="bankDaoImpl" class="com.zzxt.java.servlet.BankDaoImpl">
              	<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"></property>
              </bean>
              
              
              
              </beans>

由于xml文件中我配置的是这个NameParameterJdbcTemplate,而我的工程中却使用了没有配置完全的JdbcTemlpate,所以引发了

DataSource not set 的错误。

<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
             	<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
              
              </bean>
              
              <bean id="bankDaoImpl" class="com.zzxt.java.servlet.BankDaoImpl">
              	<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"></property>
              </bean>

这个问题对我的工程来说具有特殊性, 但是也具有一般性,出现这个问题的原因肯定在xml文件配置中。 

猜你喜欢

转载自blog.csdn.net/Maybeno1314/article/details/81557807