Java Tomcat基础版数据连接池实现(仅供参考)

本文介绍了如何根据公司现有数据连接池实现一个简单的数据库连接池——SimpleDataSourceFactory,并展示了在Tomcat上的配置方法。提供了完整的源代码供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最新在阅读公司自己写的数据连接池(比较简单的),参考其仿照写了一个数据库连接池,由于过于简单,取名SimpleDataSourceFactory,在tomcat上使用的时候需如下配置:

<GlobalNamingResources>
<Resource name="jdbc/ctpDataSource" auth="Container" factory="com.xx.yy.dbpool.SimpleDataSourceFactory" type="javax.sql.DataSource" />
</GlobalNamingResources>

完整代码如下:

package com.xx.yy.dbpool;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
import java.sql.Statement;
import java.sql.Struct;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;

import javax.naming.Context;
import javax.naming.Name;
import javax.naming.spi.ObjectFactory;
import javax.sql.DataSource;

import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;

public class SimpleDataSourceFactory implements ObjectFactory {
	private static final Log log = LogFactory.getLog(SimpleDataSourceFactory.class);
	/**
	 * 数据源名称
	 */
	private String name;
	/**
	 * Jdbc地址
	 */
	private String url;
	/**
	 * jdbc驱动
	 */
	private String driverClassName;
	/**
	 * 数据库账号
	 */
	private String username;
	/**
	 * 数据库密码
	 */
	private String password;
	/**
	 * 最小连接数
	 */
	private int minCount = 0;
	/**
	 * 最大连接数
	 */
	private int maxCount = 2000;
	/**
	 * 尝试连接次数
	 */
	private int tryCount = 5;
	/**
	 * 尝试连接等待时间
	 */
	private int tryWait = 100;
	
	private static final String datasource = "xx.yy.datasource.properies.filepath";
	private static final Logger logger = Logger.getLogger(SimpleDataSourceFactory.class.getCanonicalName());
	
	/**
	 * 弱口令
	 */
	private Set<String> weakPassword = new HashSet<String>(){
		private static final long serialVersionUID = 1L;
		{
			add("123456");
	        add("111111");
	        add("222222");
	        add("333333");
	        add("444444");
	        add("555555");
	        add("666666");
	        add("777777");
	        add("888888");
	        add("999999");
	        add("000000");
	        add("123123");
	        add("abc123");
		}
	};


	private void initialize(Name name) {
		this.name = name.get(0);
		Properties p = getProperties(System.getProperty(datasource));
		
		String property = p.getProperty(name + ".url");
		if (property != null && property.length() > 0) {
			url = property;
		}
		property = p.getProperty(name + ".driverClassName");
		if (property != null && property.length() > 0) {
			driverClassName = property;
		}
		property = p.getProperty(name + ".username");
		if (property != null && property.length() > 0) {
			username = property;
		}
		property = p.getProperty(name + ".password");
		if (property != null && property.length() > 0) {
			password = property ;
		}
		property = p.getProperty(name + ".minCount");
		if (property != null && property.length() > 0) {
			minCount = Integer.parseInt(property);
		}
		property = p.getProperty(name + ".maxCount");
		if (property != null && property.length() > 0) {
			maxCount = Integer.parseInt(property);
		}
		property = p.getProperty(name + ".tr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值