JSP Spring中Druid连接池配置详解

JSP Spring中Druid连接池配置详解,以下是完整攻略:

一、什么是Druid连接池

Druid连接池是阿里巴巴开发的一款数据库连接池,性能强大,并且具有完善的监控功能。在JSP Spring中使用Druid连接池可以有效地提高数据库连接的效率,降低连接的等待时间。

二、Druid连接池的配置

在使用Druid连接池之前,需要进行一系列的配置。

1.导入依赖

在使用Druid连接池之前,需要在pom.xml文件中通过Maven导入Druid连接池的依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.12</version>
</dependency>

2.在配置文件中配置连接池信息

在Spring的配置文件中,需要添加如下配置:

<!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!--基本属性 url、user、password -->
    <property name="url" value="jdbc:mysql://localhost:3306/test" />
    <property name="username" value="root" />
    <property name="password" value="123456" />

    <!-- 配置连接池大小 -->
    <property name="initialSize" value="5" />
    <property name="minIdle" value="5" />
    <property name="maxActive" value="20" />

    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="60000" />

    <!-- 配置监控统计拦截的filters -->
    <property name="filters" value="stat" />

    <!-- 配置测试连接有效性的sql -->
    <property name="validationQuery" value="select 'x'" />
</bean>

在上述配置中,我们设置了连接池的基本属性,包括使用的数据库URL、用户名和密码。我们还设置了连接池的大小、获取连接等待超时的时间、监控统计拦截器和测试连接有效性的SQL语句。

3. 配置过滤器

在web.xml中配置过滤器:

<!-- Druid数据源状态监控 -->
<filter>
    <filter-name>DruidWebStatFilter</filter-name>
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
    <init-param>
        <!-- 当前的监控地址为http://localhost:${server.port}/druid -->
        <param-name>exclusions</param-name>
        <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

在上述配置中,我们定义了Druid连接池状态监控过滤器的地址。

三、使用Druid连接池

在完成以上配置后,就可以使用Druid连接池来获取连接,具体方法如下:

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    @Autowired
    private DataSource dataSource;

    public void test() throws SQLException {
        Connection conn = dataSource.getConnection();
        PreparedStatement ps = conn.prepareStatement("select * from user");
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getObject(1));
        }
        rs.close();
        ps.close();
        conn.close();
    }
}

在上述代码中,我们通过@Autowired注解注入了Druid连接池数据源,然后通过getConnection()方法获取连接,使用完毕后需要关闭连接。

四、示例说明

下面是一个简单的创建用户的例子:

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    @Autowired
    private DataSource dataSource;

    public void addUser(String userName, String password) throws SQLException {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = dataSource.getConnection();
            conn.setAutoCommit(false);
            ps = conn.prepareStatement("INSERT INTO user (userName,password) VALUES (?, ?)");
            ps.setString(1, userName);
            ps.setString(2, password);
            int rows = ps.executeUpdate();
            conn.commit();
        } catch (SQLException e) {
            conn.rollback();
        } finally {
            if (ps != null) {
                ps.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    }
}

在上述代码中我们使用了Druid连接池,并通过getConnection()方法获取了连接。我们通过一个事务向用户表中插入数据,然后在finally块中关闭连接,并提交或者回滚事务。

另一个示例是一个查询用户的例子:

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    @Autowired
    private DataSource dataSource;

    public User getUserById(int userId) throws SQLException {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = dataSource.getConnection();
            ps = conn.prepareStatement("SELECT * FROM user WHERE userId=?");
            ps.setInt(1, userId);
            rs = ps.executeQuery();
            if (rs.next()) {
                User user = new User();
                user.setUserName(rs.getString("userName"));
                user.setPassword(rs.getString("password"));
                return user;
            } else {
                return null;
            }
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    }
}

在上述代码中,我们同样使用了Druid连接池,并通过getConnection()方法获取了连接。我们查询用户表,并将查询到的结果封装到一个User对象中返回。

以上就是关于JSP Spring中Druid连接池配置的完整攻略,希望能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP Spring中Druid连接池配置详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java IO及BufferedReader.readline()出现的Bug

    关于“Java IO及BufferedReader.readline()出现的Bug”,我们需要注意以下两点: 1. Java IO 中的缓存问题 Java的IO操作是基于缓存进行的,而很多读取函数如BufferedReader. readline()是以换行符作为结束标记的,但是我们在编写代码时常常忽略了特殊情况的处理,导致出现了缓存问题,例如一次读取操作…

    Java 2023年5月27日
    00
  • 如何验证Tomcat Gzip配置是否生效的方法

    当我们在Tomcat中配置gzip压缩后,我们需要一些方法来验证我们的配置是否生效。下面提供了两种方法来验证Tomcat Gzip配置是否生效的方法: 方法1:检查HTTP请求头中是否包含“Content-Encoding: gzip” 验证Tomcat Gzip配置是否生效的方法之一是检查HTTP响应头是否包含“Content-Encoding: gzip…

    Java 2023年5月19日
    00
  • Java动态代理的作用是什么?

    Java动态代理是一种在运行时期动态生成代理类的机制,通过代理类来调用目标对象的方法。在Java语言中,动态代理主要运用在AOP(面向切面编程)和RPC(远程过程调用)等场景中。其主要作用是在不修改目标对象的基础上,为目标对象添加额外的操作,称为“代理”。 使用动态代理的步骤如下: 创建一个InvocationHandler对象,并实现一个invoke方法,…

    Java 2023年5月10日
    00
  • IDEA解决Java:程序包xxxx不存在的问题

    当我们在使用IntelliJ IDEA编写Java程序时,经常会遇到程序包不存在的问题,出现这种问题的原因是因为程序没有引用依赖库或依赖库的路径配置不正确。在这里,我们提供一些方法来解决这个问题。 方法一:在项目中添加依赖库 要在项目中添加依赖库,请使用以下步骤: 打开IntelliJ IDEA并打开你的项目。 在左侧的Project面板中,右键单击“Dep…

    Java 2023年5月19日
    00
  • 使用spring的restTemplate注意点

    使用Spring的RestTemplate是在Java中向REST API发送HTTP请求的一种常见方法。它提供了许多方便的方法来处理HTTP请求和响应。使用RestTemplate时需要注意以下几点。 注意点一:配置RestTemplate的HttpClient RestTemplate的默认实现使用HttpURLConnection作为底层客户端,然而在…

    Java 2023年6月3日
    00
  • Spring Security认证机制源码层探究

    Spring Security认证机制源码层探究 Spring Security是基于Spring框架实现的一个安全框架,它提供了一套标准化的安全认证和授权解决方案。在本文中,我们将深入探究Spring Security的认证机制源码层,了解Spring Security是如何实现用户认证与授权的。 认证机制源码层探究 Spring Security认证流程…

    Java 2023年6月3日
    00
  • 三天吃透计算机网络八股文

    网络分层结构 计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。最全面的Java面试网站 五层模型:应用层、传输层、网络层、数据链路层、物理层。 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。 传输层:负责向两台主机进程之间的通信提供…

    Java 2023年4月17日
    00
  • java IO流读取图片供前台显示代码分享

    下面是Java IO流读取图片供前台显示的完整攻略: 一、概述 在Java中,使用IO流读取图片供前台显示可以分为以下几个步骤: 使用Java IO流读取图片文件到内存中; 将读取到的图片字节流转换为Base64编码; 将Base64编码的图片数据返回给前台。 二、代码示例 以下是两条示例代码,可以供您参考: 使用FileInputStream和ByteAr…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部