Attempt to refer to a unregistered pool by its alias 'xxx'

来源:互联网 发布:php全栈工程师 编辑:程序博客网 时间:2024/06/01 22:58

本人最近因为用c3p0连接池时,总是有内存泄露(应该是我自己的问题,但找了好久都没有找到在哪里泄露),想到prolool的管理界面可以查看连接状态以及泄露状态,于是便想将c3p0换成proxool。

 

具体配置我就不多说了,网上垃圾的,好的一大堆,自己找一下就可以了。我只说说我出现的错误。

 

正如标题所写,其中文字面意思是“试图引用别名为 'xxx'的连接池是未被注册的”。怎么理解呢?根据这句话来说,我们一般想到的就是启动顺序。于是我查看了web.xml,发现proxool的配置是最先启动的,说明不是这个问题。接着我在网上搜索资料,大部分都千篇一律。。。找了大量资料,主要说法有以下几种:

1、直接在java类中用main方法执行才会出现这个问题

2、复制了别人的代码出现该问题,自己手写,问题解决

3、

<listener>
    <listener-class>
  org.springframework.web.context.ContextLoaderListener
    </listener-class>
 </listener>

说的是在applicationContext.xml里如果用<listener>就不行,需要换成下面的配置:

<servlet>
  <servlet-name>contextConfigLocation</servlet-name>
  <servlet-class>
   org.springframework.web.context.ContextLoaderServlet
  </servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>

 

事实证明换了错误更多了,可能是我们其他的配置不同。

4、还有重写proxool的,因为<listener>的加载会先于proxool,所以某位大牛自己写了一个jar,说导进去就可以,还得把下面这段配置换成他定义的配置

    <!-- proxool配置 -->
    <servlet> 
        <servlet-name>ServletConfigurator</servlet-name> 
        <servlet-class> 
            org.logicalcobwebs.proxool.configuration.ServletConfigurator 
        </servlet-class> 
        <init-param> 
            <param-name>xmlFile</param-name> 
            <param-value>WEB-INF/spring-configure/proxool.xml</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet>

他的配置我没记,因为换了还是报错,不起作用。

 

 

那么上述几种权威说法,我认为有意义的只有3、4,不过仍然无法解决我报错的问题。绞尽脑汁,突然灵光一闪:想起自己原来配置hibernate+struts+proxool时,proxool.xml里如果出现中文就会出错,即使注释也不可以,于是马上着手将配置文件中的中文注释一删而净。果然问题解决!