网站开发都要用到数据库。简单的数据库连接每次都要重新连接数据库,从而导致访问速度变慢,连接池的出现就是为了解决这个问题的 ,而Tomcat自己也提供了这种机制。好,我们来看如何使用Tomcat自身提供的连接池机制来进行数据库连接,(补充说明一点:你使用的Tomcat的版本要是5.0.x或者更高,以前的版本,你还是需要在server.xml里配置使用连接池)这里我们以oracle9i为例子:
1。 就像其他的数据库连接一样,你需要把Oracle的驱动程序复制到Tomcat的common/lib目录下.
2。修改Tomcat下你的应用配置文件,这个文件放在Tomcat的conf/Catalina/localhost目录下,我们举例的文件文件名是bulletinSystem.xml,这个文件的内容如下:
-----------------------------------------------
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="E:/JBuilderProject/eshop/bulletinSystem" path="/bulletinSystem" reloadable="true" workDir="E:/JBuilderProject/eshop/Tomcat/work/bulletinSystem">
<Resource name="jdbc/eshop/bulletinSystem" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/eshop/bulletinSystem">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@192.168.13.4:1521:hong</value>
</parameter>
<parameter>
<name>username</name>
<value>eshop</value>
</parameter>
<parameter>
<name>password</name>
<value>eshop</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>validationQuery</name>
<value>select * from dual</value>
</parameter>
</ResourceParams>
</Context>
---------------------------------------------
◎ Resource的name属性定义了数据源名(绿色的字),在配置其参数和得到数据连接对象时要使用到,要求唯一。这个名字一般要用jdbc/开头,因为使用的时候查找连接池数据源使用的前缀为 java:comp/env/jdbc,见4。
◎ Resource元素里面的参数:
#factory:定义了数据源工厂,用于产生和管理连接池对象,它是由Tomcat提供的。
#driverClassName:定义了驱动程序的名称。对于不同类型的数据库和不同类型的驱动程序,该值不同。本例中使用的是Oracle的数据库。
#url :建立数据连接时使用的url字符串。不同的数据库有不同的连接方法,该值就不同。在这个参数里设置你要访问的数据库的ip和数据库服务名。
#username:访问数据库的用户名。
#password:访问数据的密码。
#maxWait:建立数据库连接时的时间等待。超时就抛出异常。
#maxActive:同一时刻最大连接数。这个要考虑机器的负载能力。
#maxIdle:最大空闲连接数。空闲时间所需要保持的最大连接数。
#validationQuery:这里定义一个可以执行的查询语句。主要作用是被连接池用来检测一个连接是否有效,因为TCP/IP连接并不会一直保持的。指定的validationQuery必须非常简单,并且执行效率要很高;本例中使用了Orale的一个虚拟对象dual,它在其他数据库中是不存在的。
3。修改你的应用的web.xml,就是应用下的WEB-INF/web.xml,添加代码如下,添加在</web-app>之前,(^_^,实践表明,前面配置好了,不添加这段配置也连接池可以用)
--------------------------------------------
<resource-ref>
<description>Oracle Datasource for edushop</description>
<res-ref-name>jdbc/eshop/bulletinSystem</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
--------------------------------------------
4。在你的应用下使用如下代码获得数据库连接:
--------------------------------------------
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
Context initCtx = new InitialContext();
Context envCtx=(Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/eshop/bulletinSystem");
Connection conn=ds.getConnection();
--------------------------------------------
也可以直接使用:
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/eshop/bulletinSystem");
4。就这么多。使用数据库连接后记得释放。写的比较简单,有时间再来补充,^_^