记录一下使用proxool的配置,和碰到的问题。
我用的开发工具是 MyEclipse , Tomcat 6.0 ,Proxool-0.9.0
1:要将 proxool-0.9.1.jar,proxool-cglib.jar和 commons-logging.jar 放到Myeclipse的项目里(web/lib)
2:在Myeclipse项目Web-Inf/下,建立一个文件: proxool.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>mydata</alias>
<driver-url>
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=AD4U
</driver-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="sa" />
</driver-properties>
<maximum-connection-count>50</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
这里,mydata是别名;
driver-url是数据库驱动的url,就是连接的url;
driver-class是驱动的类,就是数据库驱动;
driver-properties是驱动的属性,可以设置登陆数据库的用户名和密码。
maximum-connection-count是最大连接数。
3. 修改Myeclipse项目 Web-Inf / 的web.xml,在这个文件中增加如下内容:
<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/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
这段标记是要求tomcat在启动的时候加载proxool驱动并且指明 proxool.xml的位置
到此proxool的配置就完成了,建立链接时需要如下代码:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.mydata");
// mydata就是刚才你proxool.xml 里,一个配置的别名
// 一个proxool.xml 文件里可以配置多个 别名不同的数据库连接应用
注意:只能在jsp页面中使用,在java文件不用用这用引用方式,因为java文件不经过服务器,而jsp页面需要经过服务器。
其它配置属性:
maximum-connection-lifetime 最大连接生命周期 默认值:4小时
maximum-active-time: 最大活动时间 默认值:5分钟
maximum-connection-count 最大连接数 默认值:15个
minimum-connection-count 最小连接数 默认值:5个
********************************************************************
然后就是应用了,我在应用的时候,发现tomcat提示了这样的错误:
Attempt to refer to a unregistered pool by its alias 'mydata'。 --------> 是说proxool数据库连接池未配置成功
如果你也出了这样的错误,大都是因为 proxool.xml 和web.xml 没有配置好,(我的错就处在,上面提到的,忘了修改 MyEclipse 里的 web.xml),所以还是要耐心检查一下你的配置, 一定会成功的。
第二篇
目前市面上三个主流连接池从性能上排名如下:proxool>c3p0>dbcp,proxool还提供了可视化的连接池实时监控工具,所以既稳定又方便,配置也是非常容易的事情。下面我来讲讲我如何配置proxool连接池的。
1、下载相关资源。
从http://proxool.sourceforge.net/站点上下载我们需要的资源,proxool-0.9.1是最新版本,解压后从lib下copy里面的2个JAR包 proxool-0.9.1.jar和
proxool-cglib.jar至项目中去。如果不加proxool-cglib.jar的话会报 java.lang.ClassNotFoundException:org.logicalcobwebs.cglib.proxy.Callback异常。
2、首先在WEB-INF目录下新建一个proxool.xml文件。
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <proxool-config>
3. <proxool>
4. <alias>datasource1</alias>
5. <driver-url>jdbc:mysql://localhost:3306/datasource1</driver-url>
6. <driver-class>com.mysql.jdbc.Driver</driver-class>
7. <driver-properties>
8. <property name="user" value="root" />
9. <property name="password" value="root" />
10. </driver-properties>
11. <house-keeping-sleep-time>90000</house-keeping-sleep-time>
12. <maximum-new-connections>20</maximum-new-connections>
13. <prototype-count>5</prototype-count>
14. <maximum-connection-count>1000</maximum-connection-count>
15. <minimum-connection-count>10</minimum-connection-count>
16. </proxool>
17.
18. <proxool>
19. <alias>datasource2</alias>
20. <driver-url>jdbc:sybase:Tds:localhost:16428/datasource2</driver-url>
21. <driver-class>com.sybase.jdbc3.jdbc.SybDriver</driver-class>
22. <driver-properties>
23. <property name="user" value="dba" />
24. <property name="password" value="dba" />
25. </driver-properties>
26. <house-keeping-sleep-time>90000</house-keeping-sleep-time>
27. <maximum-new-connections>20</maximum-new-connections>
28. <prototype-count>5</prototype-count>
29. <maximum-connection-count>1000</maximum-connection-count>
30. <minimum-connection-count>10</minimum-connection-count>
31. </proxool>
32. </proxool-config>
我在里面配置了2个不同数据库的数据源,你可以根据需要配置多个,其中具体的参数属性我会在下面全部予以说明。
3、配置web.xml文件。
Java代码
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
5. <servlet>
6. <servlet-name>ServletConfigurator</servlet-name>
7. <servlet-class>
8. org.logicalcobwebs.proxool.configuration.ServletConfigurator
9. </servlet-class>
10. <init-param>
11. <param-name>xmlFile</param-name>
12. <param-value>WEB-INF/proxool.xml</param-value>
13. </init-param>
14. <load-on-startup>1</load-on-startup>
15. </servlet>
16. <servlet>
17. <servlet-name>datasource_situation</servlet-name>
18. <servlet-class>
19. org.logicalcobwebs.proxool.admin.servlet.AdminServlet
20. </servlet-class>
21. </servlet>
22. <servlet-mapping>
23. <servlet-name>datasource_situation</servlet-name>
24. <url-pattern>/datasource_situation</url-pattern>
25. </servlet-mapping>
26. <!-- 配置受保护域,只有Tomcat管理员才能察看连接池的信息 -->
27. <security-constraint>
28. <web-resource-collection>
29. <web-resource-name>proxool</web-resource-name>
30. <url-pattern>/datasource_situation</url-pattern>
31. </web-resource-collection>
32. <auth-constraint>
33. <role-name>manager</role-name>
34. </auth-constraint>
35. </security-constraint>
36. <login-config>
37. <auth-method>BASIC</auth-method>
38. <realm-name>proxool manager Application</realm-name>
39. </login-config>
40. <security-role>
41. <description>
42. The role that is required to log in to the Manager
43. Application
44. </description>
45. <role-name>manager</role-name>
46. </security-role>
47. <error-page>
48. <error-code>401</error-code>
49. <location>/401.jsp</location>
50. </error-page>
51. </web-app>
<load-on-startup>1</load-on-startup>用来设置加载属性,一定要保证在其他配置项之前加载。
Java代码
1. <servlet>
2. <servlet-name>datasource_situation</servlet-name>
3. <servlet-class>
4. org.logicalcobwebs.proxool.admin.servlet.AdminServlet
5. </servlet-class>
6. </servlet>
7. <servlet-mapping>
8. <servlet-name>datasource_situation</servlet-name>
9. <url-pattern>/datasource_situation</url-pattern>
10. </servlet-mapping>
这个属性是用来提供察看连接池信息的工具,既在域名后跟上/datasource_situation就可以查看了,当然名字可以自己定义。如果你想限制用户和密码来访问就用
Java代码
1. <security-constraint>
2. <web-resource-collection>
3. <web-resource-name>proxool</web-resource-name>
4. <url-pattern>/datasource_situation</url-pattern>
5. </web-resource-collection>
6. <auth-constraint>
7. <role-name>manager</role-name>
8. </auth-constraint>
9. </security-constraint>
10. <login-config>
11. <auth-method>BASIC</auth-method>
12. <realm-name>proxool manager Application</realm-name>
13. </login-config>
14. <security-role>
15. <description>
16. The role that is required to log in to the Manager
17. Application
18. </description>
19. <role-name>manager</role-name>
20. </security-role>
21. <error-page>
22. <error-code>401</error-code>
23. <location>/401.jsp</location>
24. </error-page>
这段配置就限定了只有输入了TOMCAT的管理员帐号密码后就能登陆连接池查看工具了,如果连续三次登陆失败,进入401.jsp页面。401.jsp要加入下段代码
response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\"");
4、配置连接池连接类。
Java代码
1. package selfservice;
2.
3. import java.sql.Connection;
4. import java.sql.DriverManager;
5. import java.sql.ResultSet;
6. import java.sql.SQLException;
7. import java.sql.Statement;
8.
9. import org.logicalcobwebs.proxool.ProxoolException;
10. import org.logicalcobwebs.proxool.ProxoolFacade;
11. import org.logicalcobwebs.proxool.admin.SnapshotIF;
12.
13.
14. public class PoolManager {
15.
16. private static int activeCount = 0;
17.
18.
19. public PoolManager(){
20.
21. }
22. /**
23. * 获取连接
24. * getConnection
25. * @param name
26. * @return
27. */
28. public Connection getConnection() {
29. try{
30. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驱动类
31. Connection conn = DriverManager.getConnection("proxool.datasource1");
32. //此处的datasource1是在proxool.xml中配置的连接池别名,当然根据需要可以用datasource2
33. showSnapshotInfo();
34.
35. return conn;
36. }catch(Exception ex){
37. ex.printStackTrace();
38. }
39. return null;
40. }
41. /**
42. * 此方法可以得到连接池的信息
43. * showSnapshotInfo
44. */
45. private void showSnapshotInfo(){
46. try{
47. SnapshotIF snapshot = ProxoolFacade.getSnapshot("datasource1", true);
48. int curActiveCount=snapshot.getActiveConnectionCount();//获得活动连接数
49. int availableCount=snapshot.getAvailableConnectionCount();//获得可得到的连接数
50. int maxCount=snapshot.getMaximumConnectionCount() ;//获得总连接数
51. if(curActiveCount!=activeCount)//当活动连接数变化时输出的信息
52. {
53. System.out.println("活动连接数:"+curActiveCount+"(active) 可得到的连接数:"+availableCount+"(available) 总连接数:"+maxCount+"(max)");
54. activeCount=curActiveCount;
55. }
56. }catch(ProxoolException e){
57. e.printStackTrace();
58. }
59. }
60. /**
61. * 获取连接
62. * getConnection
63. * @param name
64. * @return
65. */
66. public Connection getConnection(String name){
67. return getConnection();
68. }
69. /**
70. * 释放连接
71. * freeConnection
72. * @param conn
73. */
74. public void freeConnection(Connection conn){
75. if(conn!=null){
76. try {
77. conn.close();
78. } catch (SQLException e) {
79. e.printStackTrace();
80. }
81. }
82. }
83. /**
84. * 释放连接
85. * freeConnection
86. * @param name
87. * @param con
88. */
89. public void freeConnection (String name,Connection con){
90. freeConnection(con);
91. }
92.
93. public void getQuery() {
94. try {
95. Connection conn = getConnection();
96. if(conn != null){
97. Statement statement = conn.createStatement();
98. ResultSet rs = statement.executeQuery("select * from tblgxinterface");
99. int c = rs.getMetaData().getColumnCount();
100. while(rs.next()){
101. System.out.println();
102. for(int i=1;i<=c;i++){
103. System.out.print(rs.getObject(i));
104. }
105. }
106. rs.close();
107. }
108. freeConnection(conn);
109. } catch (SQLException e) {
110. e.printStackTrace();
111. }
112.
113. }
114.
115. }
测试成功!
下面我来介绍一下proxool.xml文件中关于proxool各个属性的详细说明:
fatal-sql-exception: 它是一个逗号分割的信息片段.当一个SQL异常发生时,他的异常信息将与这个信息片段进行比较.如果在片段中存在,那么这个异常将被认为是个致命错误(Fatal SQL Exception ).这种情况下,数据库连接将要被放弃.无论发生什么,这个异常将会被重掷以提供给消费者.用户最好自己配置一个不同的异常来抛出.
fatal-sql-exception-wrapper-class:正如上面所说,你最好配置一个不同的异常来重掷.利用这个属性,用户可以包装SQLException,使他变成另外一个异常.这个异常或者继承SQLException或者继承字RuntimeException.proxool自带了2个实现:'org.logicalcobwebs.proxool.FatalSQLException' 和'org.logicalcobwebs.proxool.FatalRuntimeException' .后者更合适.
house-keeping-sleep-time: house keeper 保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建.
house-keeping-test-sql: 如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。
injectable-connection-interface: 允许proxool实现被代理的connection对象的方法.
injectable-statement-interface: 允许proxool实现被代理的Statement 对象方法.
injectable-prepared-statement-interface: 允许proxool实现被代理的PreparedStatement 对象方法.
injectable-callable-statement-interface: 允许proxool实现被代理的CallableStatement 对象方法.
jmx: 略
jmx-agent-id: 略
jndi-name: 数据源的名称
maximum-active-time: 如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟.
maximum-connection-count: 最大的数据库连接数.
maximum-connection-lifetime: 连接最大生命时间 默认4小时
minimum-connection-count: 最小的数据库连接数
overload-without-refusal-lifetime: 略
prototype-count: 连接池中可用的连接数量.如果当前的连接池中的连接少于这个数值.新的连接将被建立(假设没有超过最大可用数).例如.我们有3个活动连接2个可用连接,而我们的prototype-count是4,那么数据库连接池将试图建立另外2个连接.这和 minimum-connection-count不同. minimum-connection-count把活动的连接也计算在内.prototype-count 是spare connections 的数量.
recently-started-threshold: 略
simultaneous-build-throttle: 同时最大连接数
statistics: 连接池使用状况统计。 参数“10s,1m,1d”
statistics-log-level: 日志统计跟踪类型。 参数“ERROR”或 “INFO”
test-before-use: 略
test-after-use: 略
trace: 如果为true,那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL).你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息.
verbose: 详细信息设置。 参数 bool 值
我用的开发工具是 MyEclipse , Tomcat 6.0 ,Proxool-0.9.0
1:要将 proxool-0.9.1.jar,proxool-cglib.jar和 commons-logging.jar 放到Myeclipse的项目里(web/lib)
2:在Myeclipse项目Web-Inf/下,建立一个文件: proxool.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>mydata</alias>
<driver-url>
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=AD4U
</driver-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="sa" />
</driver-properties>
<maximum-connection-count>50</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
这里,mydata是别名;
driver-url是数据库驱动的url,就是连接的url;
driver-class是驱动的类,就是数据库驱动;
driver-properties是驱动的属性,可以设置登陆数据库的用户名和密码。
maximum-connection-count是最大连接数。
3. 修改Myeclipse项目 Web-Inf / 的web.xml,在这个文件中增加如下内容:
<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/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
这段标记是要求tomcat在启动的时候加载proxool驱动并且指明 proxool.xml的位置
到此proxool的配置就完成了,建立链接时需要如下代码:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.mydata");
// mydata就是刚才你proxool.xml 里,一个配置的别名
// 一个proxool.xml 文件里可以配置多个 别名不同的数据库连接应用
注意:只能在jsp页面中使用,在java文件不用用这用引用方式,因为java文件不经过服务器,而jsp页面需要经过服务器。
其它配置属性:
maximum-connection-lifetime 最大连接生命周期 默认值:4小时
maximum-active-time: 最大活动时间 默认值:5分钟
maximum-connection-count 最大连接数 默认值:15个
minimum-connection-count 最小连接数 默认值:5个
********************************************************************
然后就是应用了,我在应用的时候,发现tomcat提示了这样的错误:
Attempt to refer to a unregistered pool by its alias 'mydata'。 --------> 是说proxool数据库连接池未配置成功
如果你也出了这样的错误,大都是因为 proxool.xml 和web.xml 没有配置好,(我的错就处在,上面提到的,忘了修改 MyEclipse 里的 web.xml),所以还是要耐心检查一下你的配置, 一定会成功的。
第二篇
目前市面上三个主流连接池从性能上排名如下:proxool>c3p0>dbcp,proxool还提供了可视化的连接池实时监控工具,所以既稳定又方便,配置也是非常容易的事情。下面我来讲讲我如何配置proxool连接池的。
1、下载相关资源。
从http://proxool.sourceforge.net/站点上下载我们需要的资源,proxool-0.9.1是最新版本,解压后从lib下copy里面的2个JAR包 proxool-0.9.1.jar和
proxool-cglib.jar至项目中去。如果不加proxool-cglib.jar的话会报 java.lang.ClassNotFoundException:org.logicalcobwebs.cglib.proxy.Callback异常。
2、首先在WEB-INF目录下新建一个proxool.xml文件。
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <proxool-config>
3. <proxool>
4. <alias>datasource1</alias>
5. <driver-url>jdbc:mysql://localhost:3306/datasource1</driver-url>
6. <driver-class>com.mysql.jdbc.Driver</driver-class>
7. <driver-properties>
8. <property name="user" value="root" />
9. <property name="password" value="root" />
10. </driver-properties>
11. <house-keeping-sleep-time>90000</house-keeping-sleep-time>
12. <maximum-new-connections>20</maximum-new-connections>
13. <prototype-count>5</prototype-count>
14. <maximum-connection-count>1000</maximum-connection-count>
15. <minimum-connection-count>10</minimum-connection-count>
16. </proxool>
17.
18. <proxool>
19. <alias>datasource2</alias>
20. <driver-url>jdbc:sybase:Tds:localhost:16428/datasource2</driver-url>
21. <driver-class>com.sybase.jdbc3.jdbc.SybDriver</driver-class>
22. <driver-properties>
23. <property name="user" value="dba" />
24. <property name="password" value="dba" />
25. </driver-properties>
26. <house-keeping-sleep-time>90000</house-keeping-sleep-time>
27. <maximum-new-connections>20</maximum-new-connections>
28. <prototype-count>5</prototype-count>
29. <maximum-connection-count>1000</maximum-connection-count>
30. <minimum-connection-count>10</minimum-connection-count>
31. </proxool>
32. </proxool-config>
我在里面配置了2个不同数据库的数据源,你可以根据需要配置多个,其中具体的参数属性我会在下面全部予以说明。
3、配置web.xml文件。
Java代码
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
5. <servlet>
6. <servlet-name>ServletConfigurator</servlet-name>
7. <servlet-class>
8. org.logicalcobwebs.proxool.configuration.ServletConfigurator
9. </servlet-class>
10. <init-param>
11. <param-name>xmlFile</param-name>
12. <param-value>WEB-INF/proxool.xml</param-value>
13. </init-param>
14. <load-on-startup>1</load-on-startup>
15. </servlet>
16. <servlet>
17. <servlet-name>datasource_situation</servlet-name>
18. <servlet-class>
19. org.logicalcobwebs.proxool.admin.servlet.AdminServlet
20. </servlet-class>
21. </servlet>
22. <servlet-mapping>
23. <servlet-name>datasource_situation</servlet-name>
24. <url-pattern>/datasource_situation</url-pattern>
25. </servlet-mapping>
26. <!-- 配置受保护域,只有Tomcat管理员才能察看连接池的信息 -->
27. <security-constraint>
28. <web-resource-collection>
29. <web-resource-name>proxool</web-resource-name>
30. <url-pattern>/datasource_situation</url-pattern>
31. </web-resource-collection>
32. <auth-constraint>
33. <role-name>manager</role-name>
34. </auth-constraint>
35. </security-constraint>
36. <login-config>
37. <auth-method>BASIC</auth-method>
38. <realm-name>proxool manager Application</realm-name>
39. </login-config>
40. <security-role>
41. <description>
42. The role that is required to log in to the Manager
43. Application
44. </description>
45. <role-name>manager</role-name>
46. </security-role>
47. <error-page>
48. <error-code>401</error-code>
49. <location>/401.jsp</location>
50. </error-page>
51. </web-app>
<load-on-startup>1</load-on-startup>用来设置加载属性,一定要保证在其他配置项之前加载。
Java代码
1. <servlet>
2. <servlet-name>datasource_situation</servlet-name>
3. <servlet-class>
4. org.logicalcobwebs.proxool.admin.servlet.AdminServlet
5. </servlet-class>
6. </servlet>
7. <servlet-mapping>
8. <servlet-name>datasource_situation</servlet-name>
9. <url-pattern>/datasource_situation</url-pattern>
10. </servlet-mapping>
这个属性是用来提供察看连接池信息的工具,既在域名后跟上/datasource_situation就可以查看了,当然名字可以自己定义。如果你想限制用户和密码来访问就用
Java代码
1. <security-constraint>
2. <web-resource-collection>
3. <web-resource-name>proxool</web-resource-name>
4. <url-pattern>/datasource_situation</url-pattern>
5. </web-resource-collection>
6. <auth-constraint>
7. <role-name>manager</role-name>
8. </auth-constraint>
9. </security-constraint>
10. <login-config>
11. <auth-method>BASIC</auth-method>
12. <realm-name>proxool manager Application</realm-name>
13. </login-config>
14. <security-role>
15. <description>
16. The role that is required to log in to the Manager
17. Application
18. </description>
19. <role-name>manager</role-name>
20. </security-role>
21. <error-page>
22. <error-code>401</error-code>
23. <location>/401.jsp</location>
24. </error-page>
这段配置就限定了只有输入了TOMCAT的管理员帐号密码后就能登陆连接池查看工具了,如果连续三次登陆失败,进入401.jsp页面。401.jsp要加入下段代码
response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\"");
4、配置连接池连接类。
Java代码
1. package selfservice;
2.
3. import java.sql.Connection;
4. import java.sql.DriverManager;
5. import java.sql.ResultSet;
6. import java.sql.SQLException;
7. import java.sql.Statement;
8.
9. import org.logicalcobwebs.proxool.ProxoolException;
10. import org.logicalcobwebs.proxool.ProxoolFacade;
11. import org.logicalcobwebs.proxool.admin.SnapshotIF;
12.
13.
14. public class PoolManager {
15.
16. private static int activeCount = 0;
17.
18.
19. public PoolManager(){
20.
21. }
22. /**
23. * 获取连接
24. * getConnection
25. * @param name
26. * @return
27. */
28. public Connection getConnection() {
29. try{
30. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驱动类
31. Connection conn = DriverManager.getConnection("proxool.datasource1");
32. //此处的datasource1是在proxool.xml中配置的连接池别名,当然根据需要可以用datasource2
33. showSnapshotInfo();
34.
35. return conn;
36. }catch(Exception ex){
37. ex.printStackTrace();
38. }
39. return null;
40. }
41. /**
42. * 此方法可以得到连接池的信息
43. * showSnapshotInfo
44. */
45. private void showSnapshotInfo(){
46. try{
47. SnapshotIF snapshot = ProxoolFacade.getSnapshot("datasource1", true);
48. int curActiveCount=snapshot.getActiveConnectionCount();//获得活动连接数
49. int availableCount=snapshot.getAvailableConnectionCount();//获得可得到的连接数
50. int maxCount=snapshot.getMaximumConnectionCount() ;//获得总连接数
51. if(curActiveCount!=activeCount)//当活动连接数变化时输出的信息
52. {
53. System.out.println("活动连接数:"+curActiveCount+"(active) 可得到的连接数:"+availableCount+"(available) 总连接数:"+maxCount+"(max)");
54. activeCount=curActiveCount;
55. }
56. }catch(ProxoolException e){
57. e.printStackTrace();
58. }
59. }
60. /**
61. * 获取连接
62. * getConnection
63. * @param name
64. * @return
65. */
66. public Connection getConnection(String name){
67. return getConnection();
68. }
69. /**
70. * 释放连接
71. * freeConnection
72. * @param conn
73. */
74. public void freeConnection(Connection conn){
75. if(conn!=null){
76. try {
77. conn.close();
78. } catch (SQLException e) {
79. e.printStackTrace();
80. }
81. }
82. }
83. /**
84. * 释放连接
85. * freeConnection
86. * @param name
87. * @param con
88. */
89. public void freeConnection (String name,Connection con){
90. freeConnection(con);
91. }
92.
93. public void getQuery() {
94. try {
95. Connection conn = getConnection();
96. if(conn != null){
97. Statement statement = conn.createStatement();
98. ResultSet rs = statement.executeQuery("select * from tblgxinterface");
99. int c = rs.getMetaData().getColumnCount();
100. while(rs.next()){
101. System.out.println();
102. for(int i=1;i<=c;i++){
103. System.out.print(rs.getObject(i));
104. }
105. }
106. rs.close();
107. }
108. freeConnection(conn);
109. } catch (SQLException e) {
110. e.printStackTrace();
111. }
112.
113. }
114.
115. }
测试成功!
下面我来介绍一下proxool.xml文件中关于proxool各个属性的详细说明:
fatal-sql-exception: 它是一个逗号分割的信息片段.当一个SQL异常发生时,他的异常信息将与这个信息片段进行比较.如果在片段中存在,那么这个异常将被认为是个致命错误(Fatal SQL Exception ).这种情况下,数据库连接将要被放弃.无论发生什么,这个异常将会被重掷以提供给消费者.用户最好自己配置一个不同的异常来抛出.
fatal-sql-exception-wrapper-class:正如上面所说,你最好配置一个不同的异常来重掷.利用这个属性,用户可以包装SQLException,使他变成另外一个异常.这个异常或者继承SQLException或者继承字RuntimeException.proxool自带了2个实现:'org.logicalcobwebs.proxool.FatalSQLException' 和'org.logicalcobwebs.proxool.FatalRuntimeException' .后者更合适.
house-keeping-sleep-time: house keeper 保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建.
house-keeping-test-sql: 如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。
injectable-connection-interface: 允许proxool实现被代理的connection对象的方法.
injectable-statement-interface: 允许proxool实现被代理的Statement 对象方法.
injectable-prepared-statement-interface: 允许proxool实现被代理的PreparedStatement 对象方法.
injectable-callable-statement-interface: 允许proxool实现被代理的CallableStatement 对象方法.
jmx: 略
jmx-agent-id: 略
jndi-name: 数据源的名称
maximum-active-time: 如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟.
maximum-connection-count: 最大的数据库连接数.
maximum-connection-lifetime: 连接最大生命时间 默认4小时
minimum-connection-count: 最小的数据库连接数
overload-without-refusal-lifetime: 略
prototype-count: 连接池中可用的连接数量.如果当前的连接池中的连接少于这个数值.新的连接将被建立(假设没有超过最大可用数).例如.我们有3个活动连接2个可用连接,而我们的prototype-count是4,那么数据库连接池将试图建立另外2个连接.这和 minimum-connection-count不同. minimum-connection-count把活动的连接也计算在内.prototype-count 是spare connections 的数量.
recently-started-threshold: 略
simultaneous-build-throttle: 同时最大连接数
statistics: 连接池使用状况统计。 参数“10s,1m,1d”
statistics-log-level: 日志统计跟踪类型。 参数“ERROR”或 “INFO”
test-before-use: 略
test-after-use: 略
trace: 如果为true,那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL).你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息.
verbose: 详细信息设置。 参数 bool 值