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

我的tomcat+mysql 数据库连接池配置详情

2008-07-23 11:51 405 查看
这两天一直在[痛苦]的配置Tomcat+MySQL的数据库连接池,搞了N长时间,脑袋都大了,现在终于搞定了.

有必要做一下详细记录啊~~~~~~

配置之前先是查看了大量的资料,虽然看起来配置过程似乎都不复杂也不是很难理解,不过自己一动手才发现完全不是那么一回事儿啊.

于是就开始了我痛苦的配置之旅....

首先在eclipse中打开tomcat 的server.xml找到当前工程的<context></context>

片断,在里面加入了<Resource>元素和一大堆参数,又在./WEB-INF/下的web.xml中使用<resource-ref>进行了引用,

我可是完全按照大家说的所配置的,但不只为什么还是问题多多...郁闷那!

刚一开始老是出现找不到绑定的JNDI资源的问题:

javax.naming.NameNotFoundException: 名称JDBC在上下文中没绑定

很明显是配置出了问题,于是我就查资料,发现还要在D:/Tomcat 5.5.26/conf/Catalina/localhost/下面新建个应用的xml文件,写上与server.xml中同样的内容.有点不解,网上说的都是配置全局数据源,可我只想用到单个应用里面的,

不知道是否还得配置.最后照着又做了.....(省略N次失败N次修改...)

还发现大家都说tomcat5.5与以前的5.0等版本配置上会有差别...晕啊

(看了下tomcat自带的说明文档的确和以前的不一样,不过倒是更简洁了,但是我配置成功之后又试了下以前的格式,也没有出问题啊,用的是5.5.26)

在解决上面那个问题时,好多人说MySQl配置连接池除了JDBC驱动还需要将一个包aspectjrt.ja放到D:/Tomcat 5.5.26/common/lib下面,我试了发现放不放对结果没影响啊...

后来那个绑定的问题不知道怎么就消失了...郁闷啊

好像是今天早上重新配了一遍就直接进到下面这个错误阶段了

突然想起前两天tomcat出了点问题,一直没修好,昨天晚上一气之下索性

重新下了个5.5.26的给重装了...看来是因为这个啊...

现在遇到的就是下面这个问题了

Cannot create JDBC driver of class '' for connect URL 'null'

..............

...............

Caused by: java.sql.SQLException: No suitable driver

刚开始没仔细思考,只看到上面的一句错误,搜索之后发现大家还是再说配置的问题,老天啊,我又来回检查了好几遍,真的觉得我的配置是一点问题都没有的啊,连个字母标点符号都没错啊....

就在快要崩溃时,看到了第二句错误,连起来才发现:原来上面的错误是由下面的造成的,我晕...怎么早先没看出来那...以前好像就曾因为JDBC版本的问题出现过毛病...

把mysql-connector-java-5.0.8.jar换成mysql-connector-java-3.1.14.jar

重启Tomcat,哈哈,整个世界终于变的美好了

整理配置代码如下:

Tomcat的server.xml------->>>

<Context docBase="netnote" path="/netnote"
reloadable="true" source="org.eclipse.jst.j2ee.server:netnote">

<Resource name="jdbc/netnote"

auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/gbook" <!-- 此处为该web应用的数据库名,注意不要写成web应用的名字或者JNDI资源的名字-->

username="root"
password="root"

maxIdle="30"

maxWait="5000"

maxActive="100" />

</Context>

应用WEB-INF/下面的web.xml----------->>>

(实际应用中xml中的中文注释要去掉)

<web-app>

<!-- 省略的servlet相关配置 -->

<!-- 下面引用配置好的JNDI资源-->

<resource-ref>
<description>mysql DB connection</description>
<res-ref-name>jdbc/netnote</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

用来测试的JSP中的主要代码

<%
String sql="select * from admins";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
InitialContext ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/netnote");
conn=ds.getConnection();
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next()){
out.println(rs.getInt(1)+" "+rs.getString("username"));
}
}catch(NamingException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}catch(Exception e){
out.println("数据库驱动加载失败!"+e);
e.printStackTrace();
}finally{

}
%>

在这个过程中遇到了一些很有趣的问题,而且我现在也没搞明白是怎么回事.

如果不使用工具,手动创建web工程就需要在D:/Tomcat 5.5.26/conf/Catalina/localhost下面添加这个web应用对应的xml文件.

而如果在eclipse中新建一个工程,它会自动往tomcat的server.xml文件里的

<web-app>标签中写入相应的<context/>,而不是新建个<context> 片断.

以前我以为就是这样子的,不过这次才发现:

如果在eclipse中打开tomcat工程(默认生成的)下的server.xml会看到

在<web-app>中自动添加了相应的<context>片断,但是这时我们(不使用eclipse)再打开tomcat实际的server.xml会奇怪的发现<web-app>中竟然不存在我们刚才看到的<context>片断.

我对eclipse的机制也不了解,不清楚这到底是怎么一回事,唯一的解释我觉得

就是这两次看到的server.xml文件不是同一个文件,可能eclipse在内部做了一个映射.

~~~~~~~~总之就是搞不明百具体的原理,希望有人能告诉我是怎么一回事啊~~~~~~~

在此声明:

我以上的配置完全是使用eclipse打开xml进行配置并且成功的,如果部署发布应用时可能还需要在tomcat实际的文件中再进行配置.

位置应该就是D:/Tomcat 5.5.26/conf/Catalina/localhost和D:/Tomcat 5.5.26/webapps/具体web应用的名字/WEB-INF下面的xml文件了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: