数据库连接池用法之(common-dbcp)

程序中如果想要用数据库连接池。可以用commons-dbcp-1.4.jar。该jar会配合commons-pool-1.6.jar来使用。
具体来说明如何使用dbcp数据库连接池。


1 创建一个数据源对象(需要引入:import org.apache.commons.dbcp.BasicDataSource;)
private static final BasicDataSource dataSource;


2 得到数据库参数(该设置代码放在类的static块中,当类被使用时,会第一时间先执行static块中代码):


aisHistory.properties配置文件内容如下:
connection.url = jdbc\:oracle\:thin\:@192.168.1.119\:1521\:AISH
driver.class = oracle.jdbc.driver.OracleDriver
username = ais
password = ais
InitialSize=5
MaxActive=10
MaxIdle=8
MaxWait=400000
RemoveAbandonedTimeout=400
ais_batch_num=100

程序中进行设置:


ResourceBundle resourceBundle = ResourceBundle.getBundle("aisHistory");
        String url = resourceBundle.getString("connection.url");//数据库url
        String driver = resourceBundle.getString("driver.class");//数据库驱动类
        String user = resourceBundle.getString("username");//数据库用户名
        String password = resourceBundle.getString("password");//数据库密码


String s_InitialSize=resourceBundle.getString("InitialSize");//数据库连接池初始化连接池数量
        String s_MaxActive=resourceBundle.getString("MaxActive");//数据库连接池最大活动的连接数量
        String s_MaxIdle=resourceBundle.getString("MaxIdle");//数据库连接池最大空闲的连接数量
        String s_MaxWait=resourceBundle.getString("MaxWait");//得到连接对象的最大等待时间
        String s_RemoveAbandonedTimeout=resourceBundle.getString("RemoveAbandonedTimeout");//得到连接对象后,多长时间后,连接池会收回连接对象
        String s_ais_batch_num=resourceBundle.getString("ais_batch_num");
        
        int int_InitialSize=AisHistoryUitl.getInt(s_InitialSize, 5);
        int int_MaxActive=AisHistoryUitl.getInt(s_MaxActive, 10);
        int int_MaxIdle=AisHistoryUitl.getInt(s_MaxIdle, 8);
        int int_MaxWait=AisHistoryUitl.getInt(s_MaxWait, 400000);
        int int_RemoveAbandonedTimeout=AisHistoryUitl.getInt(s_RemoveAbandonedTimeout, 400);


dataSource.setInitialSize(int_InitialSize);//初始连接池的连接数量 5
        dataSource.setMaxActive(int_MaxActive);//最大活动的连接数量 10
        dataSource.setMaxIdle(int_MaxIdle);//最大空闲连接的连接数量  8
        dataSource.setMaxWait(int_MaxWait);//最大等待时间  400000
        dataSource.setRemoveAbandoned(true);//是否关闭未关闭的连接, 默认为false, 改为true
        dataSource.setRemoveAbandonedTimeout(int_RemoveAbandonedTimeout);//默认为300,改为400


!!!说明(非常重要):
初始连接池的连接数量:是在连接池才创建的时候,就创建几个连接。保证连接池才创建后,连接池中有几个连接对象。


最大活动的连接数量:表示连接池中的最多的连接数量。容许程序得到的最多的连接对象的数量。


最大空闲连接的连接数量:当连接池中的连接对象未达到该值时,连接对象只增不减。当超过该值后(最多的连接对象)。
    使用完的连接对象会关闭。当数据库并发少了后。数据库连接数量也会维持在最大空闲连接数量和最大活动连接数量之间。
    最大空闲连接数量要尽量小于最大活动连接数量.

总体连接数量永远不会超过最大活动连接数量。即使访问数据库的并发数量少了,连接数量也不会减少,将保持在最大空闲连接数量。


最大等待时间:程序中要得到连接对象。如果超过最大等待时间还未得到连接对象,则视为超时,表示得不到连接对象。


回收时间:表示得到连接对象后。如果超过回收时间,则连接池会回收该连接对象(将该连接对象关闭,回收到池中)。


连接池默认是不自动关闭未关闭的连接对象的。需要设置removeAbandoned为true。默认是false。


3 得到连接对象
connection=dataSource.getConnection();


4 得到连接对象后。使用完毕后。需要关闭。关闭的顺序是ResultSet、Statement、Connection
if (rs != null) {
             rs.close();
        }
        if (st != null) {
             st.close();
        }
        if (conn != null) {
             conn.close();
        }


需要好好理解。数据库连接池。


这是用到的数据库连接池是commons-dbcp-1.4.jar


尝试了commons-dbcp-2.1.1.jar但是配合oracle数据库时(用的驱动包是oracle14.jar),老是报错。报oracle的驱动错误。
故暂时先用commons-dbcp-1.4.jar


这里用的数据库连接池是commons-dbcp-1.4.jar







你可能感兴趣的:(数据库连接池用法之(common-dbcp))