SSH2+proxool 出现No suitable driver found for proxool.mysqlP

php中文网
发布: 2016-06-07 15:26:41
原创
1558人浏览过

首先我们要明确使用的是ssh2框架,然而struts2是基于filter实现的那么在启动proxool的时候就不能够在用servlet来启动了! 于是我们就想到在初始化web容器的时候怎么让他一开始就加载呢? 我们查看tomcat的启动信息: Starting Servlet Engine: Apache Tomcat

首先我们要明确使用的是ssh2框架,然而struts2是基于filter实现的那么在启动proxool的时候就不能够在用servlet来启动了!

于是我们就想到在初始化web容器的时候怎么让他一开始就加载呢?

我们查看tomcat的启动信息:

 Starting Servlet Engine: Apache Tomcat/6.0.13
2012-6-10 15:31:41 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
2012-6-10 15:31:41 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization started

最先启动的是spring容器,那么这样我们就可以将proxool的配置写在spring的配置文件中让它最先加载

如下:

腾讯云AI代码助手
腾讯云AI代码助手

基于混元代码大模型的AI辅助编码工具

腾讯云AI代码助手 205
查看详情 腾讯云AI代码助手
	<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">  
		<property name="alias" value="mysqlProxool"/>
		<property name="driver" value="com.mysql.jdbc.Driver"/>
		<property name="driverUrl" value="jdbc:mysql://localhost:3306/my_blog_01?characterEncoding=UTF-8"/>
		<property name="user" value="root"/>
		<property name="password" value="123456"/>
		<property name="minimumConnectionCount" value="2"/>
		<property name="maximumConnectionCount" value="10"/>
		<property name="prototypeCount" value="5"/>
		<!-- <property name="houseKeepingSleepTime" value="100000"/> -->
         	</bean>
登录后复制

这样只需要在sessionFactory加上dataSource的引用即可如下:

 	<bean id="sessionFactory"
           		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          		<property name="configLocation" value="classpath:Hibernate.cfg.xml"/>
          		<span><property name="dataSource">
          			<ref local="dataSource"/>
          		</property>
</span>           </bean>
登录后复制

这样就不在需要配置proxool的servlet启动了,例如:

  <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/classes/proxool.xml</param-value>   
        </init-param>   
        <load-on-startup>1</load-on-startup>   
  </servlet>
 
登录后复制
以上的配置就不在需要在web.xml中进行配置。
登录后复制
而在hibernate.cfg.xml中也不在需要proxool的配置只是配置一些hibernate的信息例如:
登录后复制
<pre class="brush:php;toolbar:false;">	<property name="show_sql">true</property>
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
登录后复制
和一些实体类的映射文件:
登录后复制
 <mapping resource="com/wuda/hibernate/table/users.hbm.xml"/>
登录后复制
以上就将SSH2+PROXOOL的环境搭建好了。
登录后复制
 
登录后复制
但是在搭建好之后如果我们配置<property name="houseKeepingSleepTime" value="100000"/>
登录后复制
 
登录后复制
 
登录后复制
又会提示如下错误:
登录后复制
Invalid property 'houseKeepingSleepTime' of bean class [org.logicalcobwebs.proxool.ProxoolDataSource]: Bean property 'houseKeepingSleepTime' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
登录后复制
大概意思是说'houseKeepingSleepTime'属性是不能够写的或者没有合适的setter方法。在他的参数setter和getter的返回结果类型不一致所导致的。
登录后复制
这个我想也正是他的bug吧。
登录后复制
那么具体解决如下:
登录后复制
在proxool-0.9.1.jar(我用的proxool架包)中找到org.logicalcobwebs.proxool.ProxoolDataSource将其源码修改如下:
登录后复制
 
登录后复制
源码是:
登录后复制
1./**  
2.    * @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime  
3.    */  
4.   public long getHouseKeepingSleepTime() {   
5.       return houseKeepingSleepTime;   
6.   }   
7.  
8.   /**  
9.    * @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime  
10.    */  
11.   public void setHouseKeepingSleepTime(int houseKeepingSleepTime) {   
12.       this.houseKeepingSleepTime = houseKeepingSleepTime;   
13.   }  
登录后复制
登录后复制
 
登录后复制
修改为:
登录后复制
<ol><li><span><span>/** </span> </span></li><li><span><span>    * @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime </span> </span></li><li><span><span>    */</span><span>  </span></span></li><li><span>   </span><span>public</span><span> </span><span>long</span><span> getHouseKeepingSleepTime() {   </span></li><li><span>       </span><span>return</span><span> houseKeepingSleepTime;   </span></li><li><span>   }   </span></li><li><span>  </span></li><li><span>   </span><span>/** </span> </li><li><span><span>    * @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime </span> </span></li><li><span><span>    *此处将int类型改为long类型 </span> </span></li><li><span><span>    */</span><span>  </span></span></li><li><span>   </span><span>public</span><span> </span><span>void</span><span> setHouseKeepingSleepTime(</span><span>long</span><span> houseKeepingSleepTime) {   </span></li><li><span>       </span><span>this</span><span>.houseKeepingSleepTime = houseKeepingSleepTime;   </span></li><li><span>   }  </span></li></ol>
登录后复制
这样所有问题都解决!
登录后复制
以上所有步骤都是通过本人在网上查资料,自己手动配置而成。验证通过!
登录后复制
 
登录后复制
 
登录后复制
 
登录后复制
登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号