为什么我在配置applicationContext.xml的时候,写数据源
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"  destroy-method="close">
加上destory-methd=close就报错!  
之前的项目都是好的。为什么啊!很奇怪的。
在线等!谢谢!

解决方案 »

  1.   

    可能是你的数据源不存在这个关闭的方法,所以报错的。你换一个数据源,比如DBCP就不会报错了。
      

  2.   

    调用destroy-method="close" 这个方法close(),就是调用BeanFactory的destroySingletons()方法,具体做法就是要实现ServletContextListener这个接口,Spring中已经有具体的实现了: 
    public class ContextLoaderListener implements ServletContextListener {         private ContextLoader contextLoader;         /** 
            * Initialize the root web application context. 
            */ 
            public void contextInitialized(ServletContextEvent event) { 
                    this.contextLoader = createContextLoader(); 
                    this.contextLoader.initWebApplicationContext(event.getServletContext()); 
            }         /** 
            * Create the ContextLoader to use. Can be overridden in subclasses. 
            * @return the new ContextLoader 
            */ 
            protected ContextLoader createContextLoader() { 
                    return new ContextLoader(); 
            }         /** 
            * Return the ContextLoader used by this listener. 
            */ 
            public ContextLoader getContextLoader() { 
                    return contextLoader; 
            }         /** 
            * Close the root web application context. 
            */ 
            public void contextDestroyed(ServletContextEvent event) { 
                    this.contextLoader.closeWebApplicationContext(event.getServletContext()); 
            } } 当tomcat关闭的时候会自动调用contextDestroyed(ServletContextEvent event)这个方法。在看一下contextLoader的closeWebApplicationContext方法: public void closeWebApplicationContext(ServletContext servletContext) throws ApplicationContextException { 
                    servletContext.log("Closing root WebApplicationContext"); 
                    Object wac = servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 
                    if (wac instanceof ConfigurableApplicationContext) { 
                            ((ConfigurableApplicationContext) wac).close(); 
                    } 
            } AbstractApplicationContext.Close这个方法是要你自己调用的,在程序要结束的时候保证调用这个close方法,在这里的话就是由Listener来保证tomcat退出的时候调用close方法。 
    AbstractApplicationContext.Close的代码 : public void close() { 
                    logger.info("Closing application context [" + getDisplayName() + "]");                 // Destroy all cached singletons in this context, 
                    // invoking DisposableBean.destroy and/or "destroy-method". 
                    getBeanFactory().destroySingletons();                 // publish corresponding event 
                    publishEvent(new ContextClosedEvent(this)); 
            } 
    最终还是调用到了getBeanFactory().destroySingletons(); 看来,没有容器,我们还是需要自己来搞定这个方法的调用的 ! 
     
      

  3.   

    不要复制张贴啊。。求是解决方法。。我用的ibatis 然后用的mysql数据库