首先修改Tomcat的安装目录下子目录conf包中的context.xml文件,进行配置连接池。如下:
<Resource
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
username="bb"
password="bb"
name="jdbc/oracle"
type="javax.sql.DataSource"
auth="Container"
maxActive="10"
/>
其中,dirverClassName : oracle的驱动类名
url : 数据库的url
username : 数据库的用户名
password : 数据库当前用户名的密码
name : 当前连接池的名称,固定写法
type : 当前连接池的类型,是数据源类型
auth : 当前连接池的拥有者是Container(容器)
maxActive : 最大活跃连接
配置好tomcat的context.xml后,创建JdbcUtil类:
package util;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class JdbcUtil {
private static final ThreadLocal<Connection> tt = new ThreadLocal<Connection>();
public static Connection getConnection() throws Exception{
Connection conn = tt.get();
if(conn == null) {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
conn = ds.getConnection();
tt.set(conn);
}
return conn;
}
public static void close(ResultSet rs,Statement stmt,Connection conn) throws Exception{
if(rs != null) try { rs.close(); } catch(Exception e) {}
if(stmt != null) try { stmt.close(); } catch(Exception e) {}
if(conn != null) try { conn.close(); tt.remove(); } catch(Exception e) {}
}
}
此处用到了线程ThreadLocal,ThreadLocal中有一个存储空间,如果从当前线程获取不到conn,则创建新的conn,如果在当前线程能够获取有效的conn,则不在重新创建。其中DataSource是数据源,通过数据源获取连接,而数据源是通过context对象在容器中找jdbc/oracle这个连接池数据源。