首页 > 代码库 > java web进阶篇(四) Tomcat数据源

java web进阶篇(四) Tomcat数据源

动态web开发的最大特点是可以进行数据库的操作,传统的jdbc操作由于步骤重复性造成程序性能下降。

先来回顾JDBC的操作原理

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

2、通过DirverManager类取得数据库连接对象。

3、通过Connection实例化PreparedStatement对象,编写sql语句命令操作数据库。

4、数据库属于资源操作,操作完成后要关闭数据库以释放资源。

其实以上操作,1、2、4步骤是重复的,保留3,实际上就是数据源产生的原因。

数据源操作的核心原理是,在一个对象池中保存多个数据库的连接(也称作数据库连接池,Connection Pool),这样在进行数据库连接时,我们直接从连接池中取出一个数据库连接,当操作完成后,在把此连接放入到数据库连接池中。

其中有  一个       最小连接数,        最大连接数 ,          最大等待时间      等问题。

在web容器中,所有的数据库的连接池都是通过数据源(javax,sql.DataSource)访问的,即可以通过这个类取得一个Connection对象,但是想要得到一个DataSource对象需要使用JNDI(Java  Naming and Directory Interface命名及目录接口)进行查找。


首先一定要配置数据库驱动程序,一定要把数据库驱动复制到tomgcat的\common\lib文件夹中。

然后在server.xml中配置,在<Context>节点中增加一个<Resource>的节点,用来表示配置的连接池选项,其中name属性指的是此数据源的名称,此处为"jdbc/mldn"

,这个名称也是以后程序中访问数据库资源时需要用到的。其中节点中的auth选项表示的是连接数据库的两种选择,一个是Container:容器将代表应用程序登入到资源管理器,一般使用此方式;Application:应用程序必须程序化地登入到资源管理器。

<Context path="mldn" docBase="D:\webdemo" reload="true">

<Resource name="jdbc/mldn"  配置一个连接池资源,名称为jdbc/mldn

auth="Container"   容器负责资源的连接

type="javax.sql.DataSource"   此数据源名称对应的类型是DataSource

maxActive="100"           可以打开的最大连接数

maxIdle="30"位置的最小连接数

maxWait="10000"用户等待的最大时间

username="root"数据的用户名

password="root"数据库的密码

driverClassName="org.git.mm.mysql.Driver"    数据库的驱动程序

url="jdbc:mysql://localhost:3306/mldn/"    数据库名称

/>

</context>


在server.xml中配置完成之后就需要在一个WEB项目中配置web.xml文件,并在文件中申请要使用的数据源名称。

<resource-ref>

<description>DB Connection</description>

<res-ref-name>jdbc/mldn</res-ref-name>

<res-type>javax.sql.DataSourve</res-type>

<res-auth>Container</res-auth>

</resource-ref>


数据源的使用的是JNDI方式查找,如果使用数据源取得数据库连接,必须按照下面的步骤进行。

1、初始化名称查找上下文:Contxt  ctx=new  InitialContext();

2、通过名称查找DataSource对象,DataSource  ds=(DataSource)ctx.lookup(JNDI名称);

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

但是在实际应用中 String DSNAME="java:comp/env/jdbc/mldn";JNDI名称, 前面加上了java:comp/env/的前缀,实际上是javaEE规定的一个环境命名上下文(Environment Naming Context  (enc)),主要是为了解决JNDI查找时的冲突。