使用数据库连接池优化数据库响应
1、在工程中增加WebRoot/META-INF/context.xml 文件,文件内容如下:
<Context reloadable="true" >
<Resource name="jdbc/BookLibDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="1234"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbbooklib?useUnicode=true&characterEncoding=utf-8"/>
</Context>
然后部署到tomcat容器中。
2、在web工程的web.xml文件中增加对数据库连接池的引用:
<resource-ref>
<res-ref-name>jdbc/BookLibDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3、在项目中通过JNDI查找获得注册在tomcat容器中的数据库资源:
public static Connection getConnection() throws DBException {
//用数据库连接池的方式实现,JNDI
try {
if(ds == null){
Context context = new InitialContext();
ds = (DataSource) context.lookup("java:comp/env/jdbc/BookLibDB");
}
return ds.getConnection();
} catch (NamingException e) {
throw new DBException("数据库连接池查找失败", e);
} catch (SQLException e) {
throw new DBException("获取数据库连接异常", e);
}
}
4、在使用完数据库连接后一定要记得归还数据库连接。
try {
//......
} catch (SQLException ex) {
//......
} catch (DBException ex) {
//......
} finally{
try {
connection.close(); //把数据库连接归还到数据库连接池,提高数据库的响应能力
} catch (DBException ex) {
//......
}
}
5、注意事项:
a、由于数据库连接池的资源只能注册在web容器当中,所以在j2se中使用单元测试找不到数据库连接池的jndi。
b、需要把mysql的驱动包放到 CATALINA_HOME/lib目录下才可以,若放到工程的目录下有可能找不到驱动。