数据库连接池proxool的两种使用方式

数据库连接池可以通过两种方式来应用,针对web应用和非web应用而来。

非web应用的数据库连接池配置

第一种方式:工厂类

非web应用可以使用工厂模式将数据库连接创建封装在一个工具类中,工具类中又使用单例模式来创建加载驱动,代码如下:

工厂类:ConnectPoolFactory.java

 1 import java.io.InputStream;
 2 import java.sql.Connection;
 3 import java.sql.DriverManager;
 4 import java.util.Properties;
 5
 6 import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;
 7
 8 public class ConnectPoolFactory {
 9
10     private static ConnectPoolFactory connectPoolFactory=null;
11
12     private ConnectPoolFactory() {//构造方法
13         init();
14     }
15
16     public void init(){//把properties文件加载到链接对象
17         InputStream is = ConnectPoolFactory.class.getResourceAsStream("/proxool.properties");
18         Properties properties = new Properties();
19         try {
20             properties.load(is);
21             PropertyConfigurator.configure(properties);
22         } catch (Exception e) {
23             e.printStackTrace();
24         }
25     }
26
27     public static  ConnectPoolFactory getInstance(){//单例模式
28         if(null == connectPoolFactory){
29             connectPoolFactory = new ConnectPoolFactory();
30         }
31
32         return connectPoolFactory;
33     }
34
35
36     public Connection getConnect(){
37         Connection conn=null;
38         try {
39             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// 加载数据库连接池配备的驱动
40             conn = DriverManager.getConnection("proxool.test");//proxool为配置文件名,test为连接池别名
41         } catch (Exception e) {
42             e.printStackTrace();
43         }
44         return conn;
45     }
46
47 }

配置文件:proxool.properties

 1  jdbc-1.proxool.alias=test
 2  #jdbc-1.proxool.driver-class=oracle.jdbc.OracleDriver
 3  #jdbc-1.proxool.driver-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
 4  jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver
 5  jdbc-1.proxool.driver-url=jdbc:mysql://localhost:3306/db_course
 6  jdbc-1.user=root
 7  jdbc-1.password=root
 8
 9  jdbc-1.proxool.maximum-connection-count=8
10  jdbc-1.proxool.minimum-connection-count=5
11  jdbc-1.proxool.prototype-count=4
12  jdbc-1.proxool.verbose=true
13  jdbc-1.proxool.statistics=10s,1m,1d
14  jdbc-1.proxool.statistics-log-level=error

然后通过工厂类创建工厂对象,通过工厂对象获取连接池实例,通过实例创建连接

测试类:ProxoolTest.java

1 public class ProxoolTest {
2     public static void main(String[] args) {
3         ConnectPoolFactory factory = ConnectPoolFactory.getInstance();
4         Connection connect = factory.getConnect();
5         System.out.println("ProxoolTest.main(conncet): " + connect);
6     }
7 }

第二种方式:工具类中加载

工具类:DBUtil.java

 1 public class DBUtil {
 2     static {
 3         InputStream is = DBUtil.class
 4                 .getResourceAsStream("/proxool.properties");
 5         Properties properties = new Properties();
 6         try {
 7             properties.load(is);
 8             PropertyConfigurator.configure(properties);
 9         } catch (Exception e) {
10             e.printStackTrace();
11         }
12     }
13
14     /**
15      * 获取数据库连接
16      *
17      * @return
18      */
19     public static Connection getConn() {
20         Connection conn = null;
21         try {
22             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
23             conn = DriverManager.getConnection("proxool.test");
24         } catch (SQLException e) {
25             e.printStackTrace();
26         } catch (ClassNotFoundException e) {
27             e.printStackTrace();
28         }
29         return conn;
30     }
31
32     /**
33      * 获取sql语句发送器
34      *
35      * @param conn
36      * @return
37      */
38     public static Statement getStmt(Connection conn) {
39         Statement stmt = null;
40         try {
41             stmt = conn.createStatement();
42         } catch (SQLException e) {
43             e.printStackTrace();
44         }
45         return stmt;
46     }
47
48     /**
49      * 获取预处理发送器
50      *
51      * @param conn
52      * @param sql
53      * @return
54      */
55     public static PreparedStatement getPstmt(Connection conn, String sql) {
56         PreparedStatement pstmt = null;
57         try {
58             pstmt = conn.prepareStatement(sql);
59         } catch (SQLException e) {
60             e.printStackTrace();
61         }
62         return pstmt;
63     }
64
65     /**
66      * 动态绑定参数
67      *
68      * @param pstmt
69      * @param params
70      */
71     public static void bindParam(PreparedStatement pstmt, Object... params) {
72         for (int i = 0; i < params.length; i++) {
73             try {
74                 pstmt.setObject(i + 1, params[i]);
75             } catch (SQLException e) {
76                 e.printStackTrace();
77             }
78         }
79     }
80
81     /**
82      * 关闭资源
83      * @param autoCloseables 实现了AutoCloseable接口的实现类对象
84      */
85     public static void closeAll(AutoCloseable...autoCloseables) {
86         for (AutoCloseable autoCloseable : autoCloseables) {
87             if(autoCloseable!=null){
88                 try {
89                     autoCloseable.close();
90                 } catch (Exception e) {
91                     e.printStackTrace();
92                 }
93             }
94         }
95     }
96 }
在web应用中使用数据库连接池

proxool.properties配置文件是不可少的,但是DBUtil.java中的静态代码块就不再需要了。

不过要在web.xml中添加如下代码:

 1 <!-- 配置连接池信息 -->
 2   <servlet>
 3     <servlet-name>servletConfigurator</servlet-name>
 4     <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
 5     <init-param>
 6         <param-name>propertyFile</param-name>
 7         <param-value>WEB-INF/classes/proxool.properties</param-value>
 8     </init-param>
 9     <load-on-startup>1</load-on-startup><!-- 应用启动时加载配置信息 -->
10   </servlet>
11
12   <!-- 监控连接池 -->
13   <servlet>
14     <servlet-name>adminServlet</servlet-name>
15     <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
16   </servlet>
17   <servlet-mapping>
18     <servlet-name>adminServlet</servlet-name>
19     <url-pattern>/admin</url-pattern>
20   </servlet-mapping>

其中<url-pattern>/admin</url-pattern>用来配置访问监控连接池页面

时间: 2024-10-18 16:51:08

数据库连接池proxool的两种使用方式的相关文章

Java语言链接数据库连接池配置的两种技巧

对于对性能要求较高的企业级应用来说用JDBC连接数据库的方式一般满足不了要求,这时就要用到数据库连接池了. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 配置数据库连接池的两种方法 Tomcat服务器配置步骤: 1.把下面这段代码粘贴D:\apache-tomcat-6.0.14\conf contex

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

我爱Java系列之---【SpringBoot中常用的注解和两种注入方式】

@EnableConfigurationProperties(DataSourceProperties.class) 来声明要使用DataSourceProperties 这个类并初始化该类对象,该类不用放在IOC容器中,可以通过该注解直接使用. [email protected]:一般写在类上边,通过该注解将当前类初始化到Spring的IOC容器中,其他类若想调用,直接用@Autowired去容器中拿. [email protected]: 一般写在类上边,标明该类是一个配置类,被注解的类内部

PlaceHolder的两种实现方式

placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 1 <input type="text" name="loginName" placeholder="邮箱/手机号/QQ号"> 目前浏览器的支持情况 浏览器 IE6/7/8/9 IE10+ Firefox Chrome Safari  是否支持 NO YES YE

简易版聊天系统实现 Socket VS NIO两种实现方式

说是简单聊天系统,压根不能算是一个系统,顶多算个雏形.本文重点不在聊天系统设计和实现上,而是通过实现类似效果,展示下NIO 和Socket两种编程方式的差异性.说是Socket与NIO的编程方式,不太严谨,因为NIO的底层也是通过Socket实现的,但又想不出非常好的题目,就这样吧. 主要内容 Socket方式实现简易聊天效果 NIO方式实现简易聊天效果 两种方式的性能对比 前言 预期效果,是客户端之间进行"广播"式聊天,类似于QQ群聊天.希望以后有机会,以此简易版为基础,不断演进,演

Redis两种持久化方式(RDB&amp;AOF)

爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Redis并发锁 windows下redis基础操作与主从复制 从而 数据备份和读写分离 Redis两种持久化方式(RDB&AOF) Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDB和AOF的作用原理,剩下的就是根据实际情况来制定合适的策略了,再复杂一点,也就

冒泡排序及两种优化方式

冒泡排序是最常用的小型数据排序方式,下面是用C语言实现的,及其两种优化方式. 第一种优化方式是设置一个标记位来标记是否发生了交换,如果没有发生交换就提前结束: 第二种优化方式是记录最后放生交换的位置,作为下一趟比较结束的位置. #include <stdio.h> /* * 打印数组 * */ void printArray(int arr[], int n) { int i = 0; for (i = 0; i < n; ++i) { printf("%d ", a

struts2+spring的两种整合方式

借助于Spring插件(Struts2-spring-plugin-XXX.jar),我们可以非常简单地完成Spring和Struts2的整合,这种整合包括让Action自动装配Spring容器中的Bean,以及让Spring管理应用中的Action两种方式,不管采用哪种方式,完成Struts2和Spring的整合都是非常简单的,而且差别不大.一旦在Web应用中安装了Spring插件,即可充分利用该插件提供的功能: 1,可以通过Spring来创建所有的Action,Interceptor和Res

两种出错处理方式

两种出错处理方式:一种是对出错函数进行重定义,一种是对错误进行捕捉处理. ;;=================================================================================================== ;;=================================================================================================== ;;=======