Javaweb專案配置連線池
阿新 • • 發佈:2021-11-22
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進行測試。