数据库连接池技术
·
回想一下,之前我们写的程序访问数据库的时候好像都是按照新建数据库连接,用完后关闭连接的方式进行的。
这样的做法对于我们这种数据库访问不是很频繁的系统而言貌似不会带来明显的性能上的影响。
但是对于一个数据库访问频繁的系统而言,情况就不同了。由于建立数据库连接会需要消耗一定的系统资源,如果频繁的建立和关闭连接,会极大降低系统的性能,造成性能瓶颈。
我们能否事先建立一定数量的数据库连接,访问数据库时直接使用这些已经建立好的连接,用完后再将这些连接释放,供下一次连接使用,从而避免数据库连接频繁,建立和关闭的开销?
能,使用数据库连接池技术。
定义:
数据库连接池是在服务器启动时预先建立一些数据库连接,并将他们放在连接池集中管理,当有数据库访问的时候,应用程序会从连接池中取出一个连接供其使用,而不是新建连接,使用结束后再将连接释放回连接池,以供其他数据库访问继续使用,这称为连接复用。
通过使用数据库连接池技术,一个数据库连接可以得到高效的复用,避免频繁建立和关闭连接的系统开销。
这里主要介绍Java的Tomcat连接池。
Tomcat连接池
在工程目录下的META-INF目录中创建content.xml,在其中配置工程的Tomcat连接池数据源,名称为:Pro_TcPoolDS,内容如下:
<Context>
<Resource name="Pro_TcPoolDS"
type="javax.sql.DataSource" //数据源类型
auth="Container" //数据库管理者,Container或者Application
driverClassName="org.gjt.mm.mysql.Driver" //JDBC驱动程序
url="jdbc:mysql://localhost:3306/dbName"
username="root"
password="1234"
maxActive="1500" //最大连接数目,0表示不受限制
maxIdle="100" //最大空闲连接数目,0表示不受限制
minIdle="5" //最小空闲连接数目
maxWait="10000" //连接池连接用完时,新的请求允许等待的时间(ms),-1表示不限制
/>
</Context>
使用连接池
DataSource对象。
1、通过Context获取数据源Pro_TcPoolDS。
//获取上下文
javax.naming.Context ctx = new javax.naming.InitialContext();
//获取数据源Pro_TcPoolDS
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:comp/env/Pro_TcPoolDS");
//注:java:comp/env是ENC的标准JNDI context。Tomcat启动后会在java:comp/env处创建一个JNDI上下文环境,
//在该环境中使用lookup()查找java:comp/env后面的变量名。
2、从数据源获得数据库连接
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String sql = "select * from user";
ResultSet rs = stmt.executeQuery(sql);
3、用完后将数据库连接释放回连接池
conn.close();
//此关闭连接并不是真正的关闭数据库连接,而是将其放回空闲队列中。更多推荐
所有评论(0)