import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
public class JDBCUtils {
private JDBCUtils() {
}
private static ? dataSource = null;
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
static {
dataSource = ? ;
}
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection(){
Connection conn = tl.get();
try {
if(conn == null){
conn = dataSource.getConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
tl.set(conn);
return conn;
}
public static void startTransaction(){
Connection conn = getConnection();
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void rollback(){
Connection conn = getConnection();
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void commit(){
Connection conn = getConnection();
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void closeConnection(){
close(getConnection());
tl.remove();
}
public static void close(Connection conn){
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Statement stm){
try {
if(stm != null){
stm.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet rs){
try {
if(rs != null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn,Statement stm,ResultSet rs) {
try {
if(rs != null){
rs.close();
}
if(stm != null){
stm.close();
}
if(conn != null){
conn.close();
}
tl.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Druid 连接池 配置 (java无框架)
public static String confile = "druid.properties";
public static Properties p = null;
public static DataSource dataSource = null;
static {
p = new Properties();
InputStream inputStream = null;
try {
inputStream = DBPoolHelper.class.getClassLoader().getResourceAsStream(confile);
p.load(inputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
}
}
try {
dataSource = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
logger.error("获取连接异常 ", e);
}
}
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/数据库?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=GMT%2B8
username=root
password=
#配置参数,让ConfigFilter解密密码
#connectionProperties=config.decrypt=true;config.decrypt.key=xxxx
#监控统计拦截的filters
filters=stat
#初始化时建立物理连接的个数,初始化发生在显示调用init方法,或者第一次getConnection时
initialSize=1
#最大连接池数量
maxActive=10
#最小连接池数量
minIdle:1
#获取连接等待超时的时间,单位毫秒
maxWait=60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
#有两个含义:1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
timeBetweenEvictionRunsMillis=60000
#一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis=300000
#用来检测连接是否有效
validationQuery=SELECT 1
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
testWhileIdle=true
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnBorrow=false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn=false
#是否缓存preparedStatement,也就是PSCache
poolPreparedStatements=true
maxPoolPreparedStatementPerConnectionSize=200
参考:http://weikeqin.cn/2017/10/16/druid-db-pool-config-java/