使用http服务器(tomcat,resin,jboss等)的连接池,可以非常大的提高数据库的连接效率和简化自己的代码和操作,可以使同一个http服务器(tomcat,resin,jboss等) 下的所有应用共享一个数据库连接池,这对于硬件配置比较低和频繁操作数据库的应用来说,是一个比较好的选择.
tomcat5.0下配置连接池:
1.先把数据库的连接程序copy到tomcat/common/lib下,不要拷错目录,不然提示不能加载驱动.
2.在conf/server.xml中
<GlobalNamingResources>
...这里
</GlobalNamingResources>中间添加如下,
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" >
</Resource>
<ResourceParams name="jdbc/mysql">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>ustb</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/xwap?useUnicode=true&characterEncoding=gb2312</value>
</parameter>
</ResourceParams>
3.在conf/web.xml文件中
在</web-app>之前添加如下
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4.在conf/Catalina/localhost 下添加你的 应用名.xml文件,我的应用是stat,所以添加stat.xml文件,
全文如下
<Context path="/stat" debug="0" privileged="true">
<!-- Link to the user database we will get roles from -->
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
5.在程序中这样
public class DBPool {
private static final Logger logger = Logger.getLogger(DBPool.class);
private static DataSource pool;
static {
Context env = null;
try {
env = (Context) new InitialContext().lookup("java:comp/env");
pool = (DataSource) env.lookup(DBConstants.dbPoolName);这里的dbPoolName为"jdbc/mysql"
} catch (NamingException e) {
if (pool == null) {
logger.error("the jdbc/mysql is null");
}
logger.error(e);
}
}
public static Connection getConn() {
Connection conn = null;
if (pool != null) {
try {
conn = pool.getConnection();
} catch (SQLException e) {
logger.error(e);
}
}
return conn;
}
}
resin下配置连接池.
在resin下面配置连接池就不用这么麻烦,只要在resin conf/server.xml中加入如下配置
<database>
<jndi-name>jdbc/mysql</jndi-name>
<driver type="org.gjt.mm.mysql.Driver">
<url>jdbc:mysql://localhost/wap_order?useUnicode=true&characterEncoding=gb2312</url>
<user>read</user>
<password>read</password>
</driver>
<prepared-statement-cache-size>8</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>30s</max-idle-time>
</database>
就可以在类中直接调用了,程序和tomcat是一样的
需要注意的是,程序中取得的connection用完以后要调用.close()方法,如果每次使用都不调用close()方法,那么很快连接池中的连接就会被用完,程序就会出错了,再有就是通过连接池得到的connection调用close方法,只是把这个连接返还给了连接池,这个连接并没有被真正关闭,这与通过DriverManager.getConnection()得到的连接调用.close()还是有一点不同的.