• java 数据库连接池


     1. About

        java利用jdbc直接连接数据库,经常取得连接,用完释放,很浪费系统资源

    2. Code

       Java代码

    package com.cdv.mam.db;
    
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.SQLException;
    import java.util.Properties;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    //import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;
    
    /**
     * tomcat数据库连接池管理类<br>
     * 使用为tomcat部署环境<br>
     * 需要在类路径下准备数据库连接配置文件dbcp.properties
     * 
     */
    public class DBManager {
        private static final Log log = LogFactory.getLog(DBManager.class);
        private static final String configFile = "dbcp.properties";
    
        private static DataSource dataSource;
    
        static {
            Properties dbProperties = new Properties();
            try {
                dbProperties.load(DBManager.class.getClassLoader()
                        .getResourceAsStream(configFile));
                dataSource = BasicDataSourceFactory.createDataSource(dbProperties);
    
                Connection conn = getConn();
                DatabaseMetaData mdm = conn.getMetaData();
                log.info("Connected to " + mdm.getDatabaseProductName() + " "
                        + mdm.getDatabaseProductVersion());
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                log.error("初始化连接池失败:" + e);
            }
        }
    
        private DBManager() {
        }
    
        /**
         * 获取链接,用完后记得关闭
         * 
         * @see {@link DBManager#closeConn(Connection)}
         * @return
         */
        public static final Connection getConn() {
            Connection conn = null;
            try {
                conn = dataSource.getConnection();
            } catch (SQLException e) {
                log.error("获取数据库连接失败:" + e);
            }
            return conn;
        }
    
        /**
         * 关闭连接
         * 
         * @param conn
         *            需要关闭的连接
         */
        public static void closeConn(Connection conn) {
            try {
                if (conn != null && !conn.isClosed()) {
                    conn.setAutoCommit(true);
                    conn.close();
                }
            } catch (SQLException e) {
                log.error("关闭数据库连接失败:" + e);
            }
        }
    
    }

      properties文件(dbcp.properties)

    #数据库驱动
    driverClassName=com.mysql.jdbc.Driver
    #数据库连接地址
    url=jdbc:mysql://192.168.1.41:3306/dmc
    #用户名
    username=root
    #密码
    password=root
    
    #连接池的最大数据库连接数。设为0表示无限制
    maxActive=30
    #最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
    #接将被标记为不可用,然后被释放。设为0表示无限制
    maxIdle=10
    #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
    maxWait=1000
    
    #超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true)
    removeAbandoned=true
    #超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
    removeAbandonedTimeout=180

    用到的jar

  • 相关阅读:
    八、drop和alter
    undefined reference to ****
    cgdb的认识
    ping: unknown host www.baidu.com
    ubuntu mysql汉字写入只写入了一个字符
    gdb map.insert方法运行异常:program received signal segmentation fault
    ubuntu环境下c++ 模板特化的编写
    putty fatal error software caused connection
    ubuntu共享文件夹不能被访问,其他主机ping不通该服务器
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题
  • 原文地址:https://www.cnblogs.com/rocky-fang/p/5896827.html
Copyright © 2020-2023  润新知