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 动态数据库连接池的更多相关文章

  1. TOMCAT配置数据库连接池

      迁移时间--2017年7月9日15:27:02Author:Marydon TOMCAT配置数据库连接池 说明: a.数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数 ...

  2. Tomcat 与 数据库连接池 的小坑

    连接池的优点众所周知. 我们可以自己实现数据库连接池,也可引入实现数据库连接池的jar包,按要求进行配置后直接使用. 关于这方面的资料,好多dalao博客上记录的都是旧版本Tomcat的配置方式,很可 ...

  3. tomcat+mysql数据库连接池的操作

    使用tomcat中的context.xml设置连接池 打开文件:Apache Software Foundation\Tomcat 6.0\conf\context.xml <Resource ...

  4. Tomcat配置多线程和配置数据库连接池

    Tomcat配置多线程和配置数据库连接池 1.  tomcat配置线程池: [root@RD2_AS yanghuihui]# cd /usr/tomcat/conf/ [root@RD2_AS co ...

  5. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  6. MySql数据库连接池

    1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...

  7. 三种数据库连接池的配置及使用(For JDBC)

    DBCP 一.导包 Apache官网下载DBCP包,导入两个包路径如下: commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的 ...

  8. mybatis学习三 数据库连接池技术

    1.在内存中开辟一块空间,存放多个数据库连接对象.就是Connection的多个实例2. 连接池技术有很多,c3p0,dbcp,druid,以及JDBC Tomcat Pool, JDBC Tomca ...

  9. SpringBoot中的数据库连接池

    内置的连接池 目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数 ...

随机推荐

  1. tilestache

    pip install tilestache -i https://mirrors.ustc.edu.cn/pypi/web/simple python C:/Python27/ArcGIS10.4/ ...

  2. Wireshark wireshake数据包分割及捕包过滤器介绍

    wireshake数据包分割及捕包过滤器介绍 by:授客 QQ:1033553122 wireshake自带工具editcap分割数据包 操作: 进入到目录,然后 editcap.exe -c < ...

  3. Expo大作战(二十八)--expo sdk api之Speach(语音文字转换),Segment

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. LeetCode题解之Rotated Digits

    1.题目描述 2.代码 int rotatedDigits(int N) { ; ; i <= N; i++) { if (isGood(i)) { res++; } } return res; ...

  5. HttpWebRequest 禁用系统默认代理

    方法一 将HttpWebRequest对象的Proxy属性设置为null 方法二 配置文件修改 <proxy usesystemdefault="False" />

  6. memcached编译安装报错 ,提示checking build system type... Invalid configuration `x86_64-unknown-linux-': machine `x86_64-unknown-linux' not recognized configure: error: /bin/sh ./config.sub x86_64-unknown-linu

  7. jboss eap 6.2 ear包 下使用log4j日志

    被jboss7/eap的日志问题搞死了,查了好多资料,都是war包的,基本上使用jboss-deployment-structure.xml放到WEB-INF下,文件内容如下: 是我总是没法成功,最后 ...

  8. 通过HTTP参数污染绕过WAF拦截 (转)

    上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点.这道题大概的背景是,你拥 ...

  9. 一般处理程序HttpHandler的应用

    ashx 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名.一个httpHandler接受并处理一个http请求,类比于Java中的servlet.类比于在Ja ...

  10. Spine Skeleton Animation(2D骨骼动画)

    骨骼动画 首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时间的策略,以避免在模型的渲染中继续加重CPU的负担.帧动画模型在这 ...