Tomcat 动态数据库连接池
package com.boguan.bte.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
import com.boguan.bte.constant.IDBConstants;
/**
* 数据库工具类 名称: DBToolKit.java<br>
* 描述: <br>
* 类型: JAVA<br>
* 最近修改时间:2016年6月23日 下午6:02:50<br>
*
* @since 2016年6月23日
* @author
*/
public class DBToolKit {
/**
* 数据库用户
*/
public static String user;
/**
* 数据库密码
*/
public static String password;
/**
* 数据库驱动
*/
private static String url;
/**
* 驱动
*/
private static String driver;
/**
* 数据库连接池名称
*/
private static String JNDI;
/**
* 数据库连接池资源对象
*/
private static PoolProperties p = new PoolProperties();
/**
* 多库数据库连接池集合
*/
private static Map<String,Object> dataSources = new HashMap<String,Object>();
/**
* 构造器实现多例模式
*/
private DBToolKit(){
}
/**
* 动态获取数据库连接池
* @param dataBase
* @return
* @throws SQLException
*/
public static Connection getDynamicConnection(String dataBase) throws SQLException{
Connection conn = null;
DataSource datasource = null;
if(dataSources.containsKey(dataBase)){
datasource = (DataSource) dataSources.get(dataBase);
}else{
datasource = new DataSource();
p.setUrl(url + dataBase);
datasource.setPoolProperties(p);
dataSources.put(dataBase, datasource);
}
conn = datasource.getConnection();
return conn;
}
/**
* 初始化资源
*/
static {
user = PropertiesUtil.getDbProperty(IDBConstants.DBUSER);
password = PropertiesUtil.getDbProperty(IDBConstants.PASSWORD);
url = PropertiesUtil.getDbProperty(IDBConstants.URL);
driver = PropertiesUtil.getDbProperty(IDBConstants.DRIVER);
JNDI = PropertiesUtil.getDbProperty(IDBConstants.JNDI);
// 初始化数据库连接池资源文件对象
p.setDriverClassName(driver);
p.setUsername(user);
p.setPassword(password);
p.setJmxEnabled(true);
p.setTestWhileIdle(false);
p.setTestOnBorrow(true);
// p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(100);
p.setInitialSize(10);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(60);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
}
/**
* 获取数据库连接池
*
* @return Connection
* @throws NamingException
* @throws SQLException
*/
public static Connection getConnection() throws NamingException, SQLException {
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup(JNDI);
Connection conn = ds.getConnection();
return conn;
}
/**
* 获取默认的数据库连接池配置
*
* @return Connection
* @throws NamingException
* @throws SQLException
*/
public static Connection getDefaultConnection() throws NamingException, SQLException {
Connection conn = getDynamicConnection(IDBConstants.BASEDATABASE);
return conn;
}
}
Tomcat 动态数据库连接池的更多相关文章
- TOMCAT配置数据库连接池
迁移时间--2017年7月9日15:27:02Author:Marydon TOMCAT配置数据库连接池 说明: a.数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数 ...
- Tomcat 与 数据库连接池 的小坑
连接池的优点众所周知. 我们可以自己实现数据库连接池,也可引入实现数据库连接池的jar包,按要求进行配置后直接使用. 关于这方面的资料,好多dalao博客上记录的都是旧版本Tomcat的配置方式,很可 ...
- tomcat+mysql数据库连接池的操作
使用tomcat中的context.xml设置连接池 打开文件:Apache Software Foundation\Tomcat 6.0\conf\context.xml <Resource ...
- Tomcat配置多线程和配置数据库连接池
Tomcat配置多线程和配置数据库连接池 1. tomcat配置线程池: [root@RD2_AS yanghuihui]# cd /usr/tomcat/conf/ [root@RD2_AS co ...
- .数据库连接池技术:DBCP和C3P0
数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...
- MySql数据库连接池
1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...
- 三种数据库连接池的配置及使用(For JDBC)
DBCP 一.导包 Apache官网下载DBCP包,导入两个包路径如下: commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的 ...
- mybatis学习三 数据库连接池技术
1.在内存中开辟一块空间,存放多个数据库连接对象.就是Connection的多个实例2. 连接池技术有很多,c3p0,dbcp,druid,以及JDBC Tomcat Pool, JDBC Tomca ...
- SpringBoot中的数据库连接池
内置的连接池 目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数 ...
随机推荐
- webpack中配置Babel
Babel是一个javascript编译器,可以将ES6和更新的js语法转换成ES5的,使代码在较老的浏览器里也能正常运行. 一.安装 npm install --save-dev babel-loa ...
- 团队项目个人进展——Day06
一.昨天工作总结 冲刺第六天,深入学习了小程序官方文档,并看了几节小程序教程的视频 二.遇到的问题 对文档中的内容只是熟悉,理解并运用起来还存在问题 三.今日工作规划 学习微信小程序中WebSocke ...
- ORACLE-SQL微妙之处
本文总结一下平时经常使用的SQL语句以及一些ORACLE函数的微妙之处.欢迎大家多多补充平时最常用的SQL语句,供大家学习参考. SQL> select * from temp2; NAME S ...
- Percona Xtradb Cluster的设计与实现
Percona Xtradb Cluster的设计与实现 Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi ...
- docker部署nginx,并实现负载均衡。
安装与使用 安装 nginx官网下载地址 发布版本分为 Linux 和 windows 版本. 也可以下载源码,编译后运行. 从源代码编译 Nginx 把源码解压缩之后,在终端里运行如下命令: $ . ...
- 为何使用Microsoft SQL Server Management Studio连接Integration Services服务失败
检查是否满足以下各项: 1. 首先你要确保当前你使用的Windows账号是有管理员权限的 2. 其次请在打开Microsoft SQL Server Management Studio时,通过右键Ru ...
- 关于QT的QCombox的掉坑出坑
最近项目中开发在用到QCombox,然而在开发中,踩到了一个坑,花了一个晚上,一直在想,好在最后找到问题所在了. 这是业务的流程.直接说重点:QCombox在下拉窗更新数据的时候,会默认把下拉窗的第一 ...
- MySQL面试题36道
MySQL数据库是在免费的数据库中最受欢迎的一款,尤其是在一些小型项目以及项目资金有限的情况下,选择MySQL来作为数据存储的工具,那些不差钱并且数据吞吐量非常大的互联网公司一般都是会用付费的Orac ...
- Docker容器学习与分享05
Docker镜像操作 学完了一些最基本的操作之后,我学习了一些关于docker镜像的基本操作. 首先来学习一下从docker hub上拉取镜像,以centos镜像为例,使用docker search命 ...
- T4学习- 2、创建设计时模板
使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的关键 ...