您的位置:首页 > 运维架构 > Tomcat

Tomcat6.0连接池配置

2012-07-25 00:44 369 查看
QQ拼音生成的时间2012年7月24日23:59:11今天算是比较顺利赶在明天来临,解决了Web开发中Tomcat连接池配置的问题。网上关于连接池配置的文章千篇一律,而且大多数都是将Tomcat的帮助文档晦涩的翻译了一下就草草了事,很多代码中包含有中文字符,空格,格式不完整,注释添加错误位置。不知道写文章的人,究竟为何为文,以后即便自己用到也会出问题。还有很多问题,既然配置Tomcat,就因该标注配置的Tomcat是那一个版本,配置的信息添加在什么地方,什么位置都应该一一说清楚。自己动手亲自配置了一下。这里是基于Tomcat目录下的配置,属于全局的数据库连接池的配置。1.在Tomcat1.6.x的按照目录下的conf文件夹下打开server.xml文件配置*.xml文件不管配置信息是否正确,必须书写xml文件的格式一定要正确。
<GlobalNamingResources>
<!--Editableuserdatabasethatcanalsobeusedby
UserDatabaseRealmtoauthenticateusers
-->
<Resourcename="UserDatabase"auth="Container"
type="org.apache.catalina.UserDatabase"
description="Userdatabasethatcanbeupdatedandsaved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>

<Resource
name="jdbc/poolmssql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:5140;databaseName=ext"
username="sa"
password="shszfdbz"
maxActive="100"
maxIdle="30"
maxWait="10000"
/>
</GlobalNamingResources>
第二个Resource是配置数据源的信息2.在在Tomcat1.6.x的按照目录下的conf文件夹下打开context.xml文件在Context标签之间添加如下内容。
<ResourceLinkname="jdbc/poolmssql"global="jdbc/poolmssql"type="javax.sql.DataSource"/>
各种信息不解释,Tomcat帮助文档解释很清楚。3.在当前的应用程序的WEB-INF目录下的web.xml文件中添加如下信息
<description>MircosoftSQLServer2005</description><resource-ref><description>DBConnection</description><res-ref-name>jdbc/poolmssql</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth>
</resource-ref>
4.编写一个测试类
publicclassPoolDB{publicstaticConnectiongetConnection(){//初始化查找命名空间ContextinitContext=null;//找到DataSourceDataSourceds=null;ContextenvContext=null;Connectionconn=null;PreparedStatementpstmt=null;ResultSetrs=null;try{initContext=newInitialContext();envContext=(Context)initContext.lookup("java:/comp/env");ds=(DataSource)envContext.lookup("jdbc/poolmssql");conn=ds.getConnection();System.out.println(conn);Stringsql="select*fromStudent";pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();Students=null;Listlist=newArrayList();while(rs.next()){s=newStudent();s.setSno(rs.getString("sno"));s.setAge(rs.getInt("age"));s.setSex(rs.getString("sex"));s.setManame(rs.getString("maname"));s.setNation(rs.getString("nation"));s.setSname(rs.getString("sname"));s.setPlace(rs.getString("place"));list.add(s);}for(Objectst:list){System.out.println(st.toString());}}catch(NamingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnconn;}
这是获得数据库连接的类,这里用到了一个实体类Student,属性可以看出,数据库中已经存在一张表Student并且存有数据。接下来进行测试,在获得数据库连接的类PoolDB写上main方法:
publicstaticvoidmain(String[]args){System.out.println(PoolDB.getConnection());}
既然是在Tomcat下配置的数据库连接池那么就应该启动Tomcat;接下来运行应用程序,错误直接发生了。
publicclassInitialContextextendsObjectimplementsContext
此类是执行命名操作的初始上下文。所有命名操作都相对于某一上下文。该初始上下文实现Context接口并提供解析名称的起始点应为执行的是PoolDB类,并没有相对于上下文的操作所以抛出异常。5.编写一个*.jsp文件
<%Connectionconn=PoolDB.getConnection();
%>
使用到PoolDB类。然后在通过浏览器来访问义页面,执行正常,查询到数据库表Student中的内容。
jdbc:sqlserver://localhost:5140;selectMethod=direct;lastUpdateCount=true;databaseName=ext;,UserName=sa,MicrosoftSQLServer2005JDBCDriverStudent[age=21,maname=计算机科学与技术,nation=CHINA,place=西安,sex=男,sname=Aiilive,sno=200907010100]Student[age=22,maname=软件设计,nation=CHINA,place=西安,sex=男,sname=Secondriver,sno=200907010101]Student[age=19,maname=翰林儒学,nation=唐,place=兰若镇,sex=男,sname=宁采臣,sno=200907010102]Student[age=45,maname=擒妖科学与技术,nation=道山,place=兰若镇,sex=男,sname=燕赤霞,sno=200907010103]Student[age=27,maname=大唐时尚,nation=天庭,place=高老庄,sex=男,sname=猪八戒,sno=200907010104]Student[age=21,maname=自由文艺,nation=唐,place=兰若寺,sex=女,sname=聂小倩,sno=200907010105]Student[age=18,maname=塔与塔文化研究,nation=唐,place=西湖,sex=女,sname=白娘子,sno=200907010106]Student[age=21,maname=翰林儒学,nation=唐,place=长安,sex=男,sname=许仙,sno=200907010107]
6.接下来根据自己亲自在Tomcat1.6.x版本下的操作,去除掉在WEB-INF下的web.xml的配置信息,仍然可以获得第5条中查询的结果7.如图可以看到真相。眼睛一亮就可以看到,这里的sqljdbc2005.jar驱动包绝对不是很多网上的文章所说的那样放在Tomcat的common文件夹下,可惜Tomcat1.6.就只用lib文件。如上图:itext-5.2.1.zip是通过引用的包,这里仅仅体现sqljdbc2005.jar绝对是放在Web工程的lib目录下面的。8.在Tomcat安装目录的conf文件夹下的context.xml文件中的资源连接必须写
<ResourceLinkname="jdbc/poolmssql"global="jdbc/poolmssql"type="javax.sql.DataSource"/>
不然将会产生如下问题。
javax.naming.NameNotFoundException:NamejdbcisnotboundinthisContextatorg.apache.naming.NamingContext.lookup(NamingContext.java:770)atorg.apache.naming.NamingContext.lookup(NamingContext.java:153)atxiao.zhang.dbc.PoolDB.getConnection(PoolDB.java:33)atorg.apache.jsp.index_jsp._jspService(index_jsp.java:111)
错误信息提示很清楚所配置的数据库连接池没能子会话中找到。9.还用一些给单独的工程配置,所要做的操作和添加的配置信息是相同的只是在不同的位置。本文出自“野马红尘”博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: