在JDBC操作中,打开和关闭数据库连接,是最耗费数据库资源的,我们可以在服务器(通常指某个类中使用Map来维护已经存在的数据库连接)上存放一定量的数据库连接,每当程序要连接数据库时,就将这些链接给它们,而一旦程序退出数据库操作时,要将这些链接返回给服务器,而不是直接进行关闭/释放。
下图是数据源的基本概念:
1:通过Connection Pool 管理数据库连接。如:C3P0、DPCP等
2:通过DataSource 去管理Connection Pool。如:C3P0、DPCP等
3:DataSource被JNDI Tree绑定。
全局可用
全局可用的范围意味着tomcat服务器下面的所有应用都可以使用这个context元素定义的资源。全局可用范围的context元素在文件 ${CATALINA_HOME}/conf/context.xml 文件中描述。这个文件在tomcat刚刚被安装的时候,是没有定义任何资源的。我们可以看到,这个文件的内容:
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context>
其中的 <watchedresource>WEB-INF/web.xml</watchedresource>表示服务器会监视应用的WEB-INF/web.xml 文件来知道那个应用会引用在此处定义的资源。
下面的例子都是使用MySQL数据库:
一、配置Tomcat5数据源
1、配置tomcat下的conf下的context.xml文件,在之间添加连接池配置:
<Context> <Resource auth="Container" description="DB Connection" name="jdbc/testTomcat5" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/testTomcat5"> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>root</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost:3306/conpool</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> <parameter> <name>username</name> <value>root</value> </parameter> </ResourceParams> </Context>
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
2、配置项目中/WEB-INF/web.xml
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/testpool</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
二、配置Tomcat6数据源
1、配置tomcat下的conf下的context.xml文件,在之间添加连接池配置:
<Resource name="jdbc/testTomcat6" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:testTomcat6" username="root" password="aaaaaa" maxActive="100" maxIdle="30" maxWait="10000" />
说明:
name 表示指定的jndi名称
auth 表示认证方式,一般为Container
type 表示数据源类型,使用标准的javax.sql.DataSource
maxActive 表示连接池当中最大的数据库连接
maxIdle 表示最大的空闲连接数
maxWait 当池的数据库连接已经被占用的时候,最大等待时间
logAbandoned 表示被丢弃的数据库连接是否做记录,以便跟踪
username 表示数据库用户名
password 表示数据库用户的密码
driverClassName 表示JDBC DRIVER
url 表示数据库URL地址
2、配置你的应用下的web.xml中的之间加入:
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/testTomcat6</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
在以往的tomcat当中还需要在web.xml指定相应的resource,在tomcat 5.5以后的版本不写也可以,但建议还是配置。
三:配置Tomcat7数据源
1、将下面代码添加到Tomcat的%TOMCAT_HOME%confcontext.xml中的<Context></Context>标签中
<Context> <Resource name="jdbc/testTomcat7" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="aaaaaa" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/testTomcat7" /> </Context>
上下文context.xml中的参数的解析如下:
name 属性是数据源名称,通常采取jdbc/**。
driverClassName 属性是驱动程序名称。
username,password,数据库名称和密码。
url 访问的数据库路径。其中url的内容组成解析上篇博客中已经分析。
maxActive 属性是并发连接的最大数。设置为0则无限制。
maxWait 属性是等待连接的最大连接的时间。
maxIdle 属性是连接池中空闲的连接的个数。
2、修改web.xml
打开%TOMCAT_HOME%confweb.xml,在</web-app>的前面添加以下内容:
<description>MySQL Test App</description> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/testTomcat7</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
注意:上面的修改是针对该Tomcat下面的所有WEB项目,如果只针对某一个WEB项目,则修改该WEB项目WEB-INFweb.xml文件。