一.数据源连接池
我们之前利用jdbc连接数据库,每次都要创建连接对象,销毁连接对象,如果并发访问量比较大,这样肯定比较辣
浪费数据库的效率,我们可以像之前mybatis中缓存查询到的数据一样,可以把连接对象也建立一个缓存,然后以
后如果要获取连接就不从数据库中创建了,直接从缓存中去取,这样就节约了连接的创建和销毁的时间,能够提高
数据库的运行效率。这个“缓存”就叫数据源连接池,数据源连接池一般都是使用第三方的插件来实现,市场上常见的数据源连接池插件有dbcp,c3p0, druid (德鲁伊)连接池等等。但是一般连接池的用法都是相似的,基本上学会一个就会其他的了。
二.使用dbcp连接池获取数据库的连接对象
第一步:创建项目,引入jar包
第二步:创建测试类
/** * 在main方法中使用dbcp获取数据库连接对象 */ public class Test01 { public static void main(String[] args) throws SQLException { //创建连接池对象 BasicDataSource dataSource = new BasicDataSource(); //设置数据库的驱动(必选参数) dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver"); //设置数据库连接url(必选参数) dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:orcl"); //设置数据库连接的用户名(必选参数) dataSource.setUsername("scott"); //设置数据库连接的密码(必选参数) dataSource.setPassword("tiger"); //设置数据源连接池初始化连接数量 dataSource.setInitialSize(5); //设置数据源连接池允许的最大连接数量 dataSource.setMaxTotal(8); //设置数据源连接池最大空闲连接数量 dataSource.setMaxIdle(6); //设置数据源连接池最小空闲连接数量 dataSource.setMinIdle(3); //当数据源连接池连接已被用尽的时候,下一个要链接用户的最大等待时间 单位是毫秒 默认值是-1,是永远等待 dataSource.setMaxWaitMillis(5000L); //获取数据库连接 Connection conn1 = dataSource.getConnection(); System.out.println(conn1); System.out.println("连接池已经激活的连接数量:"+dataSource.getNumActive()); System.out.println("连接池空闲连接数量:"+dataSource.getNumIdle()); } }
三.在spring工厂中创建数据源连接池
第一步:创建项目,引入jar包
第二步:创建spring的主配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--创建dbcp数据源连接池对象--> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <!--驱动名--> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property> <!--url--> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property> <!--用户名--> <property name="username" value="scott"></property> <!--密码--> <property name="password" value="tiger"></property> <!--初始化连接数量--> <property name="initialSize" value="5"></property> <!--最大连接数量--> <property name="maxTotal" value="8"></property> <!--最大空闲连接数量--> <property name="maxIdle" value="6"></property> <!--最小空闲连接数量--> <property name="minIdle" value="3"></property> <!--连接等待的最大时间 --> <property name="maxWaitMillis" value="5000"></property> </bean> </beans>
第三步:测试
public class Test01 { public static void main(String[] args)throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); BasicDataSource dataSource = (BasicDataSource)context.getBean("dataSource"); Connection con1 = dataSource.getConnection(); Connection con2 = dataSource.getConnection(); System.out.println("激活的连接数量:"+dataSource.getNumActive()); System.out.println("空闲连接数量:"+dataSource.getNumIdle()); } }