Tomcat配置JDBC数据库连接池
在多用户的web应用程序中,无论你是使用哪一种数据库,那么获取数据库连接都是比较消耗系统资
源的, 针对数据库访问获取连接最好是使用数据库连接池技术,数据库连接池负责分配,管理和释
放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再是重新建立一个,连接超过
最大的空闲时间的时候会自动释放,这样就避免了由于没有人为的释放数据库连接而造成资源耗尽。
这样将会提高数据库的访问性能。
下面就说明下数据库连接池的配置:
第一步:配置JNDI
找到Tomcat根目录\conf\context.xml文件,在<Context>节点中添加<Resource>节点,内容如下:
<!-- JNDI CONFIG START -->
<Resource name="jdbc/bc"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="123456"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost:1433"
DatabaseName="bc_salary_db"/>
<!-- JNDI CONFIG END -->
参数说明:
name :指定Resource的jndi的名称
auth :指定管理Resource的Manager,有两个可选值:Container 和 Application,Container表示由容器创建Resource,Application表示由Web应用来创建和管理Resource
type :指定Resource所属的类名
maxActive :指定连接池中处于活动状态的连接最大的个数,取值“0”无限制
maxIdle : 指定连接池中处于空闲状态的连接的最大个数,取值“0”无限制
maxWait :指定连接池中连接在空闲时间的最长时间(单位:毫秒),超过这一时间将会抛出异常,取值“-1”无限制等待
username :数据库连接用户名
password :数据库连接密码
driverClassName :数据库连接驱动名称
url :数据库连接URL
DatabaseName :数据库名称
第二步:配置web.xml文件
在<web-app>节点下添加如下配置:
<!-- ============= 配置数据库连接池开始 ================ -->
<resource-ref>
<description>DataSource</description>
<res-ref-name>jdbc/bc</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- ============= 配置数据库连接池结束 ================ -->
参数说明:
description :对引用资源的说明
res-ref-name :指定引用jndi的名称
res-type :指定引用资源类名称
res-auth :指定管理所引用资源的Manager
第三步:添加数据库驱动文件
由于数据源是由Tomcat创建并维护,故我们应该把连接数据库的驱动包拷贝到Tomcat根目录下的lib目录下。
第四步:使用数据库连接池
下面就可以在自己的程序中,通过JNDI来获取数据源来获取数据库连接池中的连接了。
获取数据库连接代码如下:
JNDI所依赖的包包:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
try {
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/bc");
conn = dataSource.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ok,启动程序,看应该可以使用了,搞定