proxool详细配置
来源:互联网 发布:vue.js 页面加载动画 编辑:程序博客网 时间:2024/06/09 17:21
连接池最基本的目的:
1、重用连接,节省连接资源;
2、免去建立连接操作,提高效率
最近做的一个项目中运用到了连接池技术,在此简单的记录一下,我在项目中成功的配置
和测试源码。
第一步:首先去http://proxool.sourceforge.net/下载一个proxool.jar文件
第二步:就是写一个单独的proxool.xml文件放到对应工程的WEB-INF文件夹下。我用的数
据库是MySQL;proxool.xml的配置文件如下:
<?xml version="1.0" encoding="utf-8"?><something-else-entirely><proxool><alias>dbpool</alias><driver-url>jdbc:mysql://localhost/mar</driver-url><driver-class>com.mysql.jdbc.Driver</driver-class><driver-properties> <property name="user" value="root" /> <property name="password" value="1" /></driver-properties><house-keeping-sleep-time>90000</house-keeping-sleep-time><prototype-count>5</prototype-count> <maximum-connection-lifetime>24000000</maximum-connection-lifetime><maximum-connection-count>100</maximum-connection-count><minimum-connection-count>10</minimum-connection-count><simultaneous-build-throttle>100</simultaneous-build-throttle> <maximum-active-time>3000000</maximum-active-time><trace> true</trace></proxool></something-else-entirely>
对以上配置简单的解释:
1.<alias> :为该连接池起一个别名,在其他文件中引用。引用是:
(proxool.dbpool);
2. <driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root" />
<property name="password" value="root" />
</driver-properties>
配置数据库的驱动和连接。
3.<house-keeping-sleep-time> :house keeper 保留线程处于睡眠状态的最长时
间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建.
4.<maximum-new-connections>: 指因未有空闲连接可以分配而在队列中等候的最大
请求数,超过这个请求数的用户连接就不会被接受。
5.<prototype-count>:最少保持的空闲连接数。
6.<maximum-connection-count>: 允许最大连接数,超过了这个连接,再有请求时,就
排在队列中等候,最大的等待请求数由maximum-new-connections决定
7.<minimum-connection-count>:最小连接数
8. simultaneous-build-throttle : 同时执行的最大连接数
9.maximum-active-time : 如果housekeeper 检测到某个线程的活动时间大于这个数值.它
将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟.
第三步:加载并初始化proxool.xml文件。因为它是连接数据库的,其他很多模块都用到数
据,所以你必须首先加载它,
<—>在Tomcat相对应的web.xml中进行如下配置
<servlet> <servlet-name>proxoolServletConfigurator</servlet-name> <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class> <init-param> <param-name>xmlFile</param-name> <param-value>WEB-INF/proxool.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>Admin</servlet-name> <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Admin</servlet-name> <url-pattern>/admin</url-pattern> </servlet-mapping>
此时可以在程序中直接调用:
public Connection getConn() { try { Class.forName("org.logicalcobwebs.proxool.ProxoolDriver"); return DriverManager.getConnection("proxool.Develop"); } catch (ClassNotFoundException ex){ Logger.getLogger(PoolManager.class).log(Level.INFO, null,ex); } catch (SQLException ex) { Logger.getLogger(PoolManager.class).log(Level.INFO, null,ex); } return null; }
<二>,在自己写的java文件中直接调用,就是写了一个main方法,然后用"java
Application"运行,
public Connection getConnection() { Connection conn = null; try { JAXPConfigurator.configure("src/proxool.xml", false); conn = DriverManager.getConnection("proxool.dbpool"); return conn; } catch(SQLException e){ Logger.getLogger(PoolManager.class).log(Level.INFO, null,e); } return null; }
如果不这样而按<一>的程序来调用,则就会报Attempt to refer to a unregistered pool
by its alias ‘dbpool’ ,但是在JSP页面里并不会报错,其实问题的关键就是在这里,
连接池的应用本来就是要通过服务器调用的,如果你在java文件中调用,就没有涉及到服
务器,这样就会报错了!所以我们要用
JAXPConfigurator.configure("src/proxool.xml", false) 来加载配置文件!
web.xml 中的Admin 是配置proxool的管理界面:
proxool连接池的管理页面有可能不能正常显示,出现类似以下错误:
java.io.CharConversionException: Not an ISO 8859-1 character: 十
javax.servlet.ServletOutputStream.print(ServletOutputStream.java:89)
org.logicalcobwebs.proxool.admin.servlet.AdminServlet.printDefinitionEntry
(AdminServlet.java:515)
org.logicalcobwebs.proxool.admin.servlet.AdminServlet.doSnapshot
(AdminServlet.java:273)
org.logicalcobwebs.proxool.admin.servlet.AdminServlet.doStats
(AdminServlet.java:145)
org.logicalcobwebs.proxool.admin.servlet.AdminServlet.doGet
(AdminServlet.java:129)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
这是个编码问题,因我们一般用的是utf-8,gbk2312.
解决办法有两种:
1.把 web.xml 的编码换为 ISO 8859-1
2. 重写源码中的AdminServlet.java。重写这个源码,只需简单的该一个方法就可以了。
private void printDefinitionEntry(ServletOutputStream out, String name, String value) throws IOException { out.println(" <tr>"); out.print(" <td width="200" valign="top" style="" + STYLE_CAPTION + "">"); out.print(name); out.println("</td>"); if (value != null) { out.print(" <td style="" + STYLE_DATA + "">"); out.print(new String(value.getBytes("ISO-8859-1"),"utf-8")); } else { out.print(" <td style="" + STYLE_NO_DATA + "">off"); } out.print("</td>"); out.println(" </tr>"); }
然后把web.xml中的
<servlet-class>
org.logicalcobwebs.proxool.admin.servlet.AdminServlet </servlet-class>
中<servlet-class>换成你改写的那个类。
测试源码:
public Connection getConnection() { Connection conn = null; try { JAXPConfigurator.configure("src/proxool.xml", false); conn = DriverManager.getConnection("proxool.dbpool"); return conn; } catch(SQLException e){ Logger.getLogger(PoolManager.class).log(Level.INFO, null,e); } return null; } public void getQuery() { try { Connection conn = getConnection(); if(conn != null){ Statement statement = conn.createStatement(); ResultSet rs = statement.executeQuery("select * from marketing"); int c = rs.getMetaData().getColumnCount(); while(rs.next()){ System.out.println(); for(int i=1;i<=c;i++){ System.out.print(rs.getObject(i)); } } rs.close(); } } catch (SQLException e) { e.printStackTrace(); } finally{ if(conn!=null){ try { conn.close(); } catch (SQLException e) { Logger.getLogger(PoolManager.class).log(Level.ERROR,null,e); } }} }
- proxool详细配置
- proxool详细配置
- proxool详细配置
- proxool详细配置
- proxool详细配置
- proxool详细配置说明
- proxool详细配置
- proxool详细配置
- proxool详细配置
- [转载]proxool详细配置
- proxool 详细配置
- proxool详细配置
- proxool详细配置
- proxool数据库连接池详细配置
- proxool连接池配置详细说明
- proxool连接池配置详细说明
- proxool连接池配置详细说明
- proxool连接池配置详细说明
- Rest风格的web服务开发-入门篇1
- 用例图、活动图和顺序图的关系
- 工作流三位一体的驱动方式- (表单)数据 状态 人工
- 黄生借书说
- 如何查找.NET程序内存不断上涨的原因(CLRProfiler)
- proxool详细配置
- 该刷一段时间的题了
- Ubuntu_Ubuntu下的PDF相关工具
- 字符串匹配的KMP算法
- linux查看打开文件的命令–lsof
- 互联网
- Linux sed 命令详解
- 20121020早读课:基于用户体验的手机产品交互设计原则
- 邻接链表的使用