在Tomcat7中配置数据源

来源:互联网 发布:商城框架java 编辑:程序博客网 时间:2024/05/16 17:46

        今天看书看到了Tomcat数据源,但是按照书上的方法在server.xml中配置却出现了异常,上网百度了下,结果在conf/context.xml中配置才成功【可能是Tomcat7没有向下兼容】。

       下面来讲讲Tomcat数据源

       动态Web的动态体现在与数据库的交互上,但是传统的JDBC操作的过多的重复性的操作会降低程序的性能,而数据源可以提升与数据库操作的性能。

1.JDBC操作步骤

       1.加载数据库驱动程序,通过classpath配置

       2.通过DriverManager类取得数据库连接对象

       3.通过Connection实例化PreparedStatement对象,编写SQL语句操作数据库

       4.关闭数据库连接,释放资源

       提示:JDBC连接数据库时会进行多个Socket连接操作,性能很低

       思考:步骤1、2和4所有用户都是相同的,只有步骤3不同,此时如果只保留步骤3, 则性能肯定会有所提高【可通过Tomcat数据源实现】

2.数据源操作原理

       在一个对象池【也称为数据库连接池,Connection Pool】中保存多个数据库的连接,当要进行数据库操作时,可以直接从连接池中取出

一个数据库连接,操作完成后,在将此连接放回连接池中,等待其他用户使用。

3.数据源操作中的问题

       1.最小连接数:无用户连接时,数据库最小应维持的数据库连接数

       2.最大连接数:一个程序中一个数据库最多可以打开的数据库连接数

       3.最大等待时间:因为有最大连接数,所以当连接池中没有连接时,用户必须等待,但是也不能无限制地等待,当超过最大等待时间,用户就无法取得数据库连接

4.在Tomcat中使用数据库连接池

        在web容器中,数据库的连接池是通过javax.sql.DataSource访问的,即可通过DataSource类取得一个Connection对象,但需要使用JNDI进行查找。

       JDNI:Java Naming and Directory Interface——Java命名及目录接口

       JDNI作用:通过一个名称“key”查找到对应的一个对象“value”,只要key不变,vlaue可以任意修改



Tomcat中数据源操作

5.在conf/context.xml中配置数据库连接池

       在<Context>节点中

  <Resourcename="jdbc/hl"配置连接池资源,名称为jdbc/hlauth="Container"连接数据库的方法type="javax.sql.DataSource"指定此数据源对应的类型是DataSourcemaxActive="100"最大连接数maxIdel="10"最小连接数maxWait="1000"最大等待时间username="root"password="root"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/hl"  />

6.配置web.xml

       在context.xml中配置完后,就可以在需要jdbc/hl此数据库的web项目中配置web.xml

  <resource-ref><description>MySql Connection</description><res-ref-name>jdbc/mldn</res-ref-name>数据源名称<res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth>  </resource-ref>

7.查找数据源

       1.数组JNDI名称:String DSNAME = "java:com/env/jdbc/hl"

       【解释】java:com/env/:Java EE 规定的一个环境命名上下文【Environment Naming Context(ENC)】

       【高级服务器,如WebLogic、Websphere已经设置好了此属性,可不写】

       【作用】解决JNDI查找时的冲突问题

       2.初始化名称查找上下文:Context ctx = new InitialContext()

       3.通过名称查找DataSource对象:DataSource ds = (DataSource)ctx.lookup()

       4.通过DataSource取得一个数据库连接:Connection conn = ds.getConnection()

       例:通过数据源取得数据库连接————getConnection.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ page import="javax.naming.*" %><%@ page import="javax.sql.*"  %><%@ page import="java.sql.*" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%String DSNAME = "java:comp/env/jdbc/hl";Context ctx = new InitialContext();DataSource ds = (DataSource)ctx.lookup(DSNAME);Connection conn = ds.getConnection();System.out.println("获取数据库连接成功");%><%=conn%><%conn.close();%></body></html>
       本程序将打印Connection对象

       好了,这就是今天所学,明天继续!


原创粉丝点击