前几天费了九牛二虎之力终于实现了jsp与mysql和mssql的成功连接,原以为下个驱动就可以了事了,可万万没想到会有那么多事... ...
今天趁还有兴致,就打算用刚弄成功的连接做一些数据库测试,花了一个上午写了一些常用数据库操作类(这是我的习惯了,呵呵),虽然在写这些类的时候也碰到了不少小问题,但稍微借助Internet就很快都搞定了,把写好的类测试了一下,还真不错,看了一下平均页面处理时间(操作:插入一条记录):40MS,总觉得有点不爽,问题很快就找出来了, 出在数据库连接类上,就光连接平均时间要:28MS,最低也在16MS,要是能省去数据库连接这部就好了,马上就想到前几天看过一本JSP技术内幕这本书,里面有介绍关于共享连接,后来在网上查了一些资料,有很多CSDN网友都不推荐用共享连接,推荐最多的是用连接池.
一个人的话可能不可信,众人的话总是有他们一定的道理的.于是打消物理连接这种方法(毕竟我是菜菜嘛,当时没想那么多,以为一实现连接就OK了,呵呵),开始配置连接池.
长话短说,在下面我大概讲一下我配置的大概经过之前,我先说一下我的开发环境:
OS: XP SP2
DMS: MYSQL5.0
Server: Tomcat 5.5
Language: JAVA
网上有很多关于tomcat配置连接池的文章,但大多数都是介绍5.0的,而且很多文章长的都是一个样的,当然了,要是能一步到位都无所谓了,我们讲究的是效率嘛,可不知道为什么,我每次都不能一帆风顺,这次也不例外,按网上的方法配置server.xml ,web.xml,重新启动服务器,执行出错,这也是我预料中的了,后来把错误信息在baidu上搜索了一下,找到好多相关的文章,硬着头皮一个一个的看过了,网页是换了好多个,但错误还是原来那样:Name jdbc is not bound in this Context ,就因为这个错误我都搞了N个小时,后来试着用ADMIN来配置(一开始没用的原因是因为有不少网友说在5.5下该方法一般不行),只能死马当活马医了,要是这次又不行,我只能把tomcat降到5.0了,在用ADMIN之前说一下5.5的admin要自己去下过来,自己没有带的,可能官方也是从安全上考虑的吧,下过来直接覆盖相关文件夹就可以了,还有要注意的是在root下把原来的admin文件夹删除掉,不然你甭想进去:) 进入admin页面后,填了相关参数(很简单的操作),重新启动服务器,当时我是闭着眼睛的,怕又会看到那个错误,......是祸怎么躲也躲不了,还是那样...............................................那时真的无奈了,进入d:找到tomcat按下了del,这时只要敲个回车,我就要回到5.0的时代了,真有点不忍心,.......................作了好长的思想斗争后,最好还是没勇气按下去(可能我还不认输吧),点了取消后,又在网上毫无希望的找.................................
最后在一个个人博客上找到了与我相似的一篇文章,一看....呵呵,不说了,大概大家也猜到了.....问题解决,现在我总结一下我在5.5下配置连接池的几个重要的步骤:
登陆ADMIN---------------->填写相关参数------------->在conf下找到context.xml,在</Context>前加入 <Resource
name="jdbc/mysql"
type="javax.sql.DataSource"
password="123456"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="30"
maxWait="10000"
username="root"
url="jdbc:mysql://localhost/database"
maxActive="200"/>
这是最重要的一点,后来经过跟踪发现,在进入admin配置时,所影响到的页面有这么几个,conf/server.xml,ROOT/META-INF/context.xml 注意了不是上面那个context.xml
其实配置连接池就这么简单,其他细节问题我就不说了,希望这篇文章对像我昨天一样那么无奈的你有点帮助,有问题可以一起交流交流.
参考网上作的一些笔记:
一.在tomcat_home/common下放入jdbc的三个驱动程序(一定要的哦),可以在微软的网站上去下载,安装的SQLSERVER2k默认的用户名是sa,密码是空,但密码为空并不代表没有密码,所以你的url中一定要定义username和password,最好是重设定一下密码
二.出现不能引用错误的话一般就是路径没有写对,tomcat默认的路径是tomcat_home/webapps/不过使用5.5.x的话,按下面方法就行,不需要配置路径,而且也不用在youwebapp/WEB-INF/web.xml文件配置引用
三.tomcat5.5.x版的server.xml配置与tomcat5.0的配置不同,下面列举三种在tomcat5.5.x的配置方法,如果配置不正确会出现javax.naming.NameNotFoundException: Name is not bound in this Context 错误
方式一、全局数据库连接池
1、通过管理界面配置连接池,或者直接在tomcat/conf/server.xml的GlobalNamingResources中增加
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
2、在tomcat/webapps/myapp/META-INF/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
这样就可以了。
方式二、全局数据库连接池
1、同上
2、在tomcat/conf/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
方式三、局部数据库连接池
只需在tomcat/webapps/myapps/META-INF/context.xml的Context中增加:
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
以上三种方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是从微软网站上下载的sql server jdbc (sp3)。
四.报错org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)此是一个小问题,因为我的SQLSERVER2K的服务改成手动的,所以每次启动后就要手动的启动SQLSERVER2K,由于一下子不记的启动了,所以报些错误,所以如果你经常要用到SQLSERVER2K的话,最好不要将其改为手动启动