最近用到了JDBC連接池,記錄一下:
1.首先將配置文件放置指定目錄。最好是resource下。文件內容及格式如下
#clickhouse連接池
driverClassName=ru.yandex.clickhouse.ClickHouseDriver
url=jdbc:clickhouse://192.168.0.52:8123/cars_recommend?characterEncoding=utf-8
user=
password=
filters=stat
initialSize=2
maxActive=30
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
2.加載配置,初始化
package util;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.log4j.Logger;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
public class UserPoolConnection {
/**
* 要實現單例模式,保證全局只有一個數據庫連接池
*/
static Logger log = Logger.getLogger(UserPoolConnection.class);
private static UserPoolConnection dbPoolConnection = null;
private static DruidDataSource druidDataSource = null;
static {
Properties properties = loadPropertiesFile("resources/user_server.properties");
try {
//DruidDataSrouce工廠模式
druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
log.error("獲取配置失敗");
}
}
/**
* 數據庫連接池單例
*
* @return
*/
public static synchronized UserPoolConnection getInstance() {
if (null == dbPoolConnection) {
dbPoolConnection = new UserPoolConnection();
}
return dbPoolConnection;
}
/**
* 返回druid數據庫連接
*
* @return
* @throws SQLException
*/
public DruidPooledConnection getConnection() throws SQLException {
return druidDataSource.getConnection();
}
/**
* @param fullFile 配置文件名
* @return Properties對象
*/
private static Properties loadPropertiesFile(String fullFile) {
if (null == fullFile || fullFile.equals("")) {
throw new IllegalArgumentException("Properties file path can not be null" + fullFile);
}
InputStream inputStream = null;
Properties p = null;
try {
inputStream = UserPoolConnection.class.getClassLoader().getResourceAsStream("user_server.properties");
p = new Properties();
p.load(inputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != inputStream) {
inputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return p;
}
}
3.調用連接:
public ResultSet userconn(String sql) {
//ResultSet resultSet = null;
try {
connection = UserPoolConnection.getInstance().getConnection();
statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
return resultSet;
} catch (Exception e) {
log.info("此次查詢數據庫結果爲空:" + sql);
}
return null;
}
在讀取配置文件時,使用讀流的方式讀取。