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

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

第一种方式:工厂类

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

工厂类:ConnectPoolFactory.java

 import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties; import org.logicalcobwebs.proxool.configuration.PropertyConfigurator; public class ConnectPoolFactory { private static ConnectPoolFactory connectPoolFactory=null; private ConnectPoolFactory() {//构造方法
init();
} public void init(){//把properties文件加载到链接对象
InputStream is = ConnectPoolFactory.class.getResourceAsStream("/proxool.properties");
Properties properties = new Properties();
try {
properties.load(is);
PropertyConfigurator.configure(properties);
} catch (Exception e) {
e.printStackTrace();
}
} public static ConnectPoolFactory getInstance(){//单例模式
if(null == connectPoolFactory){
connectPoolFactory = new ConnectPoolFactory();
} return connectPoolFactory;
} public Connection getConnect(){
Connection conn=null;
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// 加载数据库连接池配备的驱动
conn = DriverManager.getConnection("proxool.test");//proxool为配置文件名,test为连接池别名
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} }

配置文件:proxool.properties

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

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

测试类:ProxoolTest.java

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

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

工具类:DBUtil.java

 public class DBUtil {
static {
InputStream is = DBUtil.class
.getResourceAsStream("/proxool.properties");
Properties properties = new Properties();
try {
properties.load(is);
PropertyConfigurator.configure(properties);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 获取数据库连接
*
* @return
*/
public static Connection getConn() {
Connection conn = null;
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
conn = DriverManager.getConnection("proxool.test");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
} /**
* 获取sql语句发送器
*
* @param conn
* @return
*/
public static Statement getStmt(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
} /**
* 获取预处理发送器
*
* @param conn
* @param sql
* @return
*/
public static PreparedStatement getPstmt(Connection conn, String sql) {
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
} /**
* 动态绑定参数
*
* @param pstmt
* @param params
*/
public static void bindParam(PreparedStatement pstmt, Object... params) {
for (int i = 0; i < params.length; i++) {
try {
pstmt.setObject(i + 1, params[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
} /**
* 关闭资源
* @param autoCloseables 实现了AutoCloseable接口的实现类对象
*/
public static void closeAll(AutoCloseable...autoCloseables) {
for (AutoCloseable autoCloseable : autoCloseables) {
if(autoCloseable!=null){
try {
autoCloseable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
在web应用中使用数据库连接池

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

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

 <!-- 配置连接池信息 -->
<servlet>
<servlet-name>servletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/classes/proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!-- 应用启动时加载配置信息 -->
</servlet> <!-- 监控连接池 -->
<servlet>
<servlet-name>adminServlet</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>adminServlet</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>

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

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

  1. 第一章 Mybtais的两种启动方式

    Mybatis的两种启动方式如下: 1.xml实现: xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现. 首先是创建Config ...

  2. Java中String对象两种赋值方式的区别

    本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...

  3. Spring学习之Spring与Mybatis的两种整合方式

    本机使用IDEA 2020.1.MySql 8.0.19,通过Maven进行构建 环境准备 导入maven依赖包 <dependencies> <dependency> < ...

  4. String 的两种实例化方式

    String 的两种实例化方式 隐式实例化:直接赋值 public class Demo { public static void main(String[] args) { String s = & ...

  5. Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

    封面:洛小汐 作者:潘潘 一直以来 他们都说为了生活 便追求所谓成功 顶级薪水.名牌包包 还有学区房 · 不过 总有人丢了生活 仍一无所获 · 我比较随遇而安 有些事懒得明白 平日里问心无愧 感兴趣的 ...

  6. String基础: String两种创建对象方式的比较

    字符串常量 在一般的语言中常量一旦声明则不可改变,在java中的字符串常量是以匿名对象来表示的 javaz中字符串两种定义方法: String strA= new String("hello ...

  7. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  8. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  9. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

随机推荐

  1. Getting Started with the Intel Media SDK

    By Gael Hofemeier on March 19, 2015 Follow Gael on Twitter: @GaelHof Media SDK Developer’s Guide Med ...

  2. [Selenium] Android HTML5 中 Application Cache

    HTML5 中引入了 Application Cache,这意味着 Web 应用程序可以被缓存到本地,且可在没有网络的情况下也能访问该 Web 应用程序 Application Cache 在以下3个 ...

  3. asp.net core zipkin

    微服务监控zipkin+asp.net core 0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一 ...

  4. DP专辑之线性DP

    POJ1390 题目链接:http://poj.org/problem?id=1390 分类:记忆化搜索 dp[i][j][k] 表示,从i到j块且j后面有k块与第j块的颜色一样.dp[l][r][k ...

  5. [ZJOI 2008] 骑士

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1040 [算法] 首先 , 题目中互相讨厌的关系构成了一棵基环森林 用拓扑排序找出环 ...

  6. Brackets(区间dp)

    Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8017   Accepted: 4257 Descript ...

  7. Android适合组件化开发的路由框架:Launch

    1.概述 最近越来越不想写代码了,特别是一些重复性的代码,比如由于每次启动一个 Activity,我们都会很习惯的在 Activity 中写下: public static void launch(A ...

  8. (转)ORA-01245错误 (2013-04-13 18:37:01)

    转自:http://blog.sina.com.cn/s/blog_56359cc90101crx2.html 数据库rman restore database 之后,执行recover databa ...

  9. [原]Windows下openssl的下载安装和使用

    安装openssl有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.下面对两种方式均进行详细描述. 一.下载和安装openss 方法一:直接使用openssl安装包 W ...

  10. 51nod 1489 蜥蜴和地下室(dp)

    传送门 题意 分析 dp[12][20][20][20]; // dp[a][b][c][d]第a个弓箭手面临第a-1.a.a+1个弓箭手的生命值分别为b.c.d的状态 转移巧妙,需注意 trick ...