package io.loli.sc.server.redirect.dao; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.tomcat.jdbc.pool.DataSource; import org.apache.tomcat.jdbc.pool.PoolProperties; public class ConnectionUtil { private static final Logger logger = LogManager.getLogger(ImageDao.class); private static DataSource datasource = new DataSource(); private static String url; private static String driver; private static String username; private static String password; // load db properties; static { logger.info("准备加载数据库配置文件"); Properties dbProps = null; dbProps = new Properties(); try (InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream( "db.properties");) { dbProps.load(is); } catch (IOException e) { logger.error("加载出现异常:" + e); } url = dbProps.getProperty("url"); driver = dbProps.getProperty("driver"); username = dbProps.getProperty("username"); password = dbProps.getProperty("password"); logger.info("加载完毕:" + url + ", " + driver + ", " + username + ", " + password); } static { logger.info("初始化数据库连接池"); PoolProperties p = new PoolProperties(); p.setUrl(url); p.setDriverClassName(driver); p.setUsername(username); 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(40); 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"); datasource.setPoolProperties(p); logger.info("数据库连接池加载完毕"); } public static Connection getConnection() throws SQLException { Connection con = null; con = datasource.getConnection(); return con; } public static void close(Connection conn, Statement stmt, ResultSet rs) { if (conn != null) { try { conn.close(); } catch (SQLException e) { logger.error(e); } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { logger.error(e); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { logger.error(e); } } } } } } } }