数据源与连接池技术

来源:互联网 发布:godaddy域名转走 编辑:程序博客网 时间:2024/06/05 04:00

数据源:是在JDBC 2.0中引入的一个概念。在JDBC 扩展包中定义了javax.sql.DataSource接口,它负责建立与数据库的连接,在应用程序访问数据库时不必编写连接数据库的代码,可以直接从数据源获得数据库连接。数据源作为一个不能直接看到它具体存在的东西,它的作用就是获取数据库连接。数据源怎么表示和体现呢?DataSource 接口有一组特性可以用于确定和描述它所表示的现实存在的数据源。我们配置好的数据库连接池也是以数据源的形式存在的。


连接池:在DataSource中事先建立了多个数据库连接,这些数据库连接保存在连接池中。java 程序访问数据库时,只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束时,再将数据库连接返回给连接池,这样做可以提高访问数据的效率。


数据源的作用是获取数据库连接,连接池是对已近创建好的数据库连接对象进行管理。  连接池里放的是数据库连接对象,数据源是要去获取一个数据库连接,也可以说是去获取一个数据库连接对象,对象代表的就是一个连接嘛。数据源是一个源头、一个路径、一个获取连接的过程。  连接池里放的就是一个一个的连接对象。调用数据源就可以去获得一个连接。

它们是两个概念,工作原理图如下:

  该如何配置数据源呢?

数据源的配置过程是固定模式,总结起来主要三步。

1.在tomcat 服务器中添加匹配的数据库驱动,方法如下

将匹配的驱动  jar包文件(如Oracle 的 ojdbc14.jar) 复制到tomcat 安装目录下的lib 文件夹中。

2.配置tomcat 服务器的配置文件,方法如下:

在tomcat 服务器的conf/context.xml文件中添加如下配置信息。

<Resource name="jdbc/news"

                   auth="Container" type="javax.sql.DataSource" maxActivive="100"

                   maxIDle="30" maxWait="10000" username="scott" password="tiger"

                   driverClassName="pracle.jdbc.OracleDriver"

                   url ="jdbc:oracle:thin:@localhost:1521:news"/>



  name=指定Resource的JNDI名称
  auth=指定管理Resource的Manager(Container由容器创建和管理,Application由Web应用创建和管理)
  type=指定Resource的java类
  maxActive=指定连接池中处于活动状态的数据库连接的最大数量
  maxIdle=指定连接池中处于空闲状态的数据库的最大数量
  maxWait=指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限期等待,单位为毫秒(ms)

3.配置应用程序的web.xml文件。

该步骤 只在早期的 tomcat版本中需要配置,6及以后的都不需要再配置。


如何读取数据源呢?

使用JNDI (java 命名与目录接口,是一个应用程序设计的API)


通过javax。naming.Cntext 查找JNDI Resource的接口 然后通过该对象的lookkup()方法去获取之前创建好的数据源。

lookup()方法的语法如下;

lookup("java:comp/env/数据源名称")

//java:comp/env/这是Java的语法要求,必须写上。
 //这里的数据源名称就是上面的jdbc/news,这个news是项目名。


下面直接上代码:

public Connection getConnection(){
 
 try {
  //初始化上下文
  Context cxt = new InitialContext();
  //获取与逻辑名相关联的数据源对象
  DataSource ds = (DataSource) cxt.lookup("jdva:comp/env/jdbc/news");
  conn = ds.getConnection();
 } catch (NamingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }catch (SQLException e) {
  // TODO: handle exception
  e.printStackTrace();
 }
 return conn;
}


读取数据源获取数据库连接时,要确保Tomcat 服务器已近启动,其次读取数据源的代码应运行在Tomcat 中。


0 0