Home > OJ Develop > 关于连接池配置的一些事

关于连接池配置的一些事

今天试着配置了下tomcat的连接池,这里我用的是mysql数据库
首先要把jdbc的jar扔到tomcat目录下的lib以及自己工程的lib里,如果不放到tomcat下,会提示说找不到驱动.
然后在工程的META-INF里新建一个context.xml,内容如下

<Context docBase="onlinejudge">
 
   <Resource name="jdbc/FjnuDB" auth="Container" type="javax.sql.DataSource"
               maxActive="500" maxIdle="50" maxWait="20000"
               username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
			   removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
               url="jdbc:mysql://localhost:3306/onlinejudge?autoReconnect=true"/>
 
</Context>

其中,username跟password很明显,代表连接数据库的用户名与密码,在url里面的onlinejuge则是数据库.
maxActive连接池允许的最大并发连接数,值为非正数时表示不限制。
maxIdle连接池中的最大空闲连接数,超过此数值时多余的空闲连接将会被释放,值为负数时表示不限制。
maxWait以毫秒表示的当连接池中没有可用连接时等待可用连接返回的时间,超时则抛出异常,值为-1时无限期等待。
driverClassName使用的JDBC驱动完整JAVA类名。
removeAbandoned 是否清除已经超过“removeAbandonedTimout”设置的无效连接。如果值为“true”则超过“removeAbandonedTimout”设置的无效连接将会被清除。设置此属性可以从那些没有合适关闭连接的程序中恢复数据库的连接。
removeAbandonedTimeout以秒表示的清除无效连接的时限。
最后这两个值最好要设定,当我们编程时忘记将连接还给连接池时,设置这两个选项将会自动回收,当然最好还是要在程序中显式的回收
其中name=”jdbc/FjnuDB”这个是我们命名的,下面将要用到这个名字
在工程的WEB-INF/web.xml里添加如下代码:

  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/FjnuDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

注意这里的就是我们在刚才name=”"里填写的名字
然后在JAVA中可以这样调用

DataSource ds = null;
			InitialContext localInitialContext;
			try {
				localInitialContext = new InitialContext();
				ds = (DataSource)localInitialContext.lookup("java:/comp/env/jdbc/FjnuDB");
			} catch (NamingException e) {
				logger.error("NamingException:", e);
			}
return ds.getConnection();

注意,这里的context.xml其实在实际运行中好像只在第一次会将其复制到tomcat目录下的conf\Catalina\localhost里,并命名成你工程的相应名字,如我的工程是oj,则名字为oj.xml,然后以后读取内容,实际都是从该文件读取,如果你后面修改了context.xml的配置,必须将oj.xml删掉或者手动复制一份新的,否则将继续用旧的配置,我今天为这事就弄了好久才发现原来是这么回事……

Categories: OJ Develop Tags: ,
  1. May 18th, 2010 at 09:49 | #1

    不错 学习了

  1. No trackbacks yet.