Java教程

Javaweb项目配置连接池

本文主要是介绍Javaweb项目配置连接池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Javaweb项目配置连接池

我这里以druid数据连接池作为案例,其他的连接池也差不多

1.首先去maven仓库下载 druid 和 log4j 的jar包,添加到项目的WEB-INF目录下的lib包中并手动右键点击添加到库

image-20211122123042612 image-20211122123305280

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"/>

image-20211122124018261

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>

image-20211122095427770

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进行测试。

这篇关于Javaweb项目配置连接池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!