数据库连接池proxool的两种使用方式
数据库连接池可以通过两种方式来应用,针对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的两种使用方式的更多相关文章
- 第一章 Mybtais的两种启动方式
Mybatis的两种启动方式如下: 1.xml实现: xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现. 首先是创建Config ...
- Java中String对象两种赋值方式的区别
本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...
- Spring学习之Spring与Mybatis的两种整合方式
本机使用IDEA 2020.1.MySql 8.0.19,通过Maven进行构建 环境准备 导入maven依赖包 <dependencies> <dependency> < ...
- String 的两种实例化方式
String 的两种实例化方式 隐式实例化:直接赋值 public class Demo { public static void main(String[] args) { String s = & ...
- Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式
封面:洛小汐 作者:潘潘 一直以来 他们都说为了生活 便追求所谓成功 顶级薪水.名牌包包 还有学区房 · 不过 总有人丢了生活 仍一无所获 · 我比较随遇而安 有些事懒得明白 平日里问心无愧 感兴趣的 ...
- String基础: String两种创建对象方式的比较
字符串常量 在一般的语言中常量一旦声明则不可改变,在java中的字符串常量是以匿名对象来表示的 javaz中字符串两种定义方法: String strA= new String("hello ...
- Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
随机推荐
- Opencv与dlib联合进行人脸关键点检测与识别
前言 依赖库:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置,重点在实现上.使用libfacedetection实现人脸区域检测,联合dlib标记 ...
- I.MX6 Android 5.1.1 下载、编译
/************************************************************************* * I.MX6 Android 5.1.1 下载. ...
- [Selenium] 配置 Internet Explorer Driver 的注意事项
1)请确保 IEDriverServer 的可执行文件在系统环境变量PATH 中 2)在IE7 和以上版本的 Internet Explorer 上,必须确保保护模式的正确配置.设置方式为 Tools ...
- 【SCOI 2009】 Windy数
[题目链接] 点击打开链接 [算法] 数位DP,注意处理前导零的情况 [代码] #include<bits/stdc++.h> using namespace std; #define M ...
- nodejs开发游戏服务器遇到的性能问题
问题描述: 使用nodejs开发了一个游戏服务器,为了尽可能提高服务器的性能,服务器采用多进程的架构,前面处理玩家socket连接的是多个nodejs进程,使用 child_process 模块,服务 ...
- 为什么linux有足够的内存还进行swap?
1.Linux在内存被用完之前开始交换.这是为了提高性能和响应能力: 性能提高是因为一些内存放磁盘缓存比方内存更合适.因此,最好将一个已经停用了一段时间的程序交换出去,而将经常使用的文件保存在缓存中. ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时12&&13
课时12 神经网络训练细节part2(上) 训练神经网络是由四步过程组成,你有一个完整的数据集图像和标签,从数据集中取出一小批样本,我们通过网络做前向传播得到损失,告诉我们目前分类效果怎么样.然后我们 ...
- 洛谷 - P2055 - 假期的宿舍 - 最大流
https://www.luogu.org/problemnew/show/P2055 这是一个错误的示范. 一开始觉得就找一条路从外校同学连到本校同学然后最终从周末回家的同学流出,每个人睡后一个人的 ...
- 洛谷 - P2335 - 位图 - 简单dp
https://www.luogu.org/problemnew/show/P2335 假如我们使用dp的话,每次求出一个点的左上方.右上方.左下方.右下方的最近的白点的距离.那么只是n²的复杂度.这 ...
- Springboot 配置 application.yml 连接MySQL数据库
1.在pom.xml的<dependencies></dependencies>标签中中加入以下依赖 <dependency> <groupId>org ...