public class DruidPool {
private static DruidDataSource _dds = null;
private static class DruidPoolHolder {
public static DruidPool _databasePool = new DruidPool();
}
static {
NormalSettingFactory factory = NormalSettingFactory.getInstance();
File file = new File("druidpool.properties");
NormalSetting normalSetting = factory.createSetting(file, Setting.PROPERTY);
Properties properties = normalSetting.getProperties();//读取配置文件
try {
_dds = (DruidDataSource) DruidDataSourceFactory
.createDataSource(properties);
System.out.println("DruidPool Inited");
} catch (Exception e) {
e.printStackTrace();
}
}
private DruidPool() {} //singleton
public void init() {
try {
DruidPooledConnection connection = this.getConnection();
connection.recycle();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 得到一个数据库连接池实例
* @return ConnectionPool 实例
*/
public static DruidPool getInstance() {
return DruidPoolHolder._databasePool;
}
/**
* 得到一个连接
* @return DruidPooledConnection 一个连接
* @throws SQLException SQL异常
*/
public DruidPooledConnection getConnection() throws SQLException {
return _dds.getConnection();
}
/**
* 关闭数据库连接池
*/
public void close() {
_dds.close();
}
}
由于当中使用了我自己的SettingManager类,该类的地址在我的GitHub上,不过使用Java自带的Properties也可以实现配置.
由于使用了LazyLoad,如果用户需要第一次就撞在完成,则可以考虑如下的调用顺序:
DruidPool druidPool = DruidPool.getInstance();
UUDIManager uudiManager = UUDIManager.getInstance();
MapperFactory mapperFactory = MapperFactory.getInstance();
Main_ServerSocket serverSocket = Main_ServerSocket.getInstance();
//----------------------------------------
//以上是声明组件druidPool.init();uudiManager.init();mapperFactory.init();serverSocket.init();
//----------------------------------------
//由于使用了LazyLoad,所以需要激活mapperFactory.autoInit();
接下来是配置文件的内容:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=delta-boyMIKE
filters=stat
initialSize=30
maxActive=5000
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=truetestOnBorrow=falsetestOnReturn=falsepoolPreparedStatements=falsemaxPoolPreparedStatementPerConnectionSize=500