Javaweb项目配置连接池
我这里以druid数据连接池作为案例,其他的连接池也差不多
1.首先去maven仓库下载 druid 和 log4j 的jar包,添加到项目的WEB-INF目录下的lib包中并手动右键点击添加到库
2.进入自己的 Tomcat的conf目录下的context.xml和web.xml 进行如下配置:
context.xml配置如下:
<!-- 使用阿里巴巴的DruidDataSource配置针对Oracle数据库的JNDI数据源 -->
<Resource
name="jdbc/OracleDataSource"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="JH"
password="123456"
maxActive="50"
maxWait="10000"
removeabandoned="true"
removeabandonedtimeout="60"
logabandoned="false"
filters="stat"/>
web.xml配置如下:
<!-- druid监控配置 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 允许清空统计数据 -->
<param-name>resetEnable</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 用户名 -->
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<!-- 密码 -->
<param-name>loginPassword</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
3.进入自己的web项目下找到 WEB-INF目录下的web.xml 进行配置:
<!--
JNDI配置的资源引用:
res-ref-name:表示引用资源的名称,和前面tomcat连接池配置那保持一致
res-type:此资源对应的类型为javax.sql.DataSource
res-auth:容器授权管理
-->
<resource-ref>
<description>Oracle DB Connection</description>
<res-ref-name>jdbc/OracleDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4.编写连接池工具类
import com.alibaba.druid.pool.DruidDataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author JH_Y
* @version 1.0
* 从JNDI容器中获取DataSource,再通过DataSource获取数据库连接
*/
public class ConnectPoolUtil {
/*
web.xml文件中的JNDI数据源引用配置
<resource-ref>
<description>Oracle DB Connection</description>
<res-ref-name>jdbc/OracleDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
*/
/**
* Oracle数据库配置的JNDI数据源连接名,后面跟的是DataSource名,
DataSource名在web.xml文件中的<res-ref-name></res-ref-name>进行了配置
*/
private static final String ORACLE_DB_JNDINAME = "java:comp/env/jdbc/OracleDataSource";
private static DruidDataSource dsOracle = null;
static{
try {
//1、初始化名称查找上下文
Context ctx = new InitialContext();
//2、通过JNDI名称找到DataSource
dsOracle = (DruidDataSource) ctx.lookup(ORACLE_DB_JNDINAME);
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* Description: 获取Oracle数据库连接
*/
public static Connection getOracleConnection() throws SQLException {
return dsOracle.getConnection();
}
/**
* 要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
*/
public static void release(ResultSet rs, Statement st,Connection conn){
if(rs!=null){
try{
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e) {
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
public static void release(Statement st,Connection conn){
release(null,st,conn);
}
}
附带提一下:
在用JNDI连接数据库时用main函数测试时总报错,是因为 InitialContext 是要在应用服务器的上下文里才有的。所以不能用main函数直接测试,只能放到tomcat或者servlet、jsp进行测试。