1. 数据源简介
JDBC 2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接,当在应用程序中访问数据库时不必编写连接数据库的代码,可以直接从数据源获得与数据库的连接。
1.1 数据源和数据库连接池
在数据源中实现建立了多个数据库连接,这些数据库连接保存在连接池中。当Java程序访问数据库时,只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束后,再将数据库连接放回连接池,这样做可以提高访问数据库的效率。试想如果Web应用每次接收到用户请求,都和数据库建立一个新的连接,数据库操作结束后就断开连接,这样会耗费大量的时间和资源。因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源。Java程序则要把代表连接的java.sql.Connection对象等加载到内存中,所以建立数据库连接的开销很大。
1.2 数据源和JNDI资源
DataSource对象通常是由Servlet容器提供的,因此Java程序无需自己创建DataSource对象,而只要直接使用Servlet容器提供的DataSource对象即可。而Java程序获得Servlet容器提供的DataSource对象的引用,则要依赖于Java的JNDI(Java Naming and Directory Interface)技术。
可以简单地把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑定。外部程序可以通过名字来获得某个对象的引用。
在javax.naming包中提供了Context接口,该接口提供了将对象和名字绑定,以及通过名字来检索对象的方法。其主要方法:
- bind(String name,Object object):将一个对象与一个名字绑定。
- lookup(String name):返回与指定的名字绑定的对象。
Tomcat把DataSource作为一种可配置的JNDI资源来处理,生成DataSource对象的工厂为org.apache.commons.BasicDataSourceFactory。假定配置了名为"jdbc/BookDB"的DataSource,那么应用访问该DataSource可以通过 context.lookup("jdbc/BookDB")。
2. 配置数据源
为Web应用配置数据源涉及修改context.xml和web.xml文件,未来用到的时候再进行补充。