Java数据库连接池之DBCP浅析_动力节点Java学院整理

yizhihongxing

Java数据库连接池之DBCP浅析

什么是数据库连接池

数据库连接池是数据库连接对象的一个容器。在程序初始化时,容器被创建,并装入足够的连接对象,在程序运行过程中,系统将连接对象放入容器中,并从容器中取出连接对象,使用完毕后再将连接对象放回容器中。

其中,连接对象是指一个数据库连接。对于Java来说,主流的数据库连接方式有两种,一种是JDBC(Java数据库连接),一种是Hibernate(ORM框架),而这两种连接方式又都涉及到数据库连接的创建和关闭。当JDBC程序频繁访问数据库时,便会频繁地创建和关闭数据库连接,这样的高频率操作对数据库造成很大的负担,(连接的建立和撤消会消耗极其宝贵的系统资源,如数据库内部锁(metadata locks),TCP/IP连接,网络通信等,所以对于频繁使用数据库操作的应用,为了提高性能,就应该利用连接池技术来管理这些连接) 因此连接池技术应运而生,它能够在系统初始化时建立足够导的连接,不同的请求可以从连接池中获取连接对象,使用完毕后又将连接放回连接池中,从而避免了频繁地创建和关闭数据库连接,提高了系统的性能。

DBCP连接池

DBCP是Apache Common提供的连接池。它提供了一种方式来管理您的引用JDBC连接。同样作为commons-pool的一部分,您可以使用DBCP轻松地创建一个池来管理任意对象。

配置与创建

在使用DBCP连接池之前,我们需要在程序中引入DBCP的依赖,同时定义连接池的配置信息。具体方式如下:

pom.xml

<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

connectionPool.xml


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${driverClassName}"/>
    <property name="url" value="${jdbcUrl}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    <property name="initialSize" value="${initialSize}"/>
    <property name="maxActive" value="${maxActive}"/>
    <property name="maxIdle" value="${maxIdle}"/>
    <property name="maxWait" value="${maxWait}"/>
</bean>

上面的xml中,配置了最基本的几个连接池参数:

  • driverClassName:JDBC Driver的驱动程序类名
  • url:数据库连接地址
  • username:数据库用户名
  • password:数据库密码
  • initialSize:初始化连接池数量
  • maxActive:连接池允许的最大活动连接数量
  • maxIdle:最大空闲连接数
  • maxWait:当连接池中连接存放满后,新的连接请求等待的时间,单位毫秒。

在我们的程序中,我们可以使用Spring的依赖注入技术,在需要连接的位置引用名为dataSource的连接池,这样我们便可以使用连接池中的连接进行操作了。如下:

@Autowired
private DataSource dataSource;

使用示例

下面我们实际编写一个使用DBCP连接池进行操作的示例,示例中我们使用的是MySQL数据库。

首先,我们需要在pom.xml文件中引入MySQL驱动的依赖,如下:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>

接下来我们通过一个Dao类来实现对数据库的增删改查操作,如下:

@Repository
public class UserDao {

    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public void addUser(String name, String password) {
        String sql = "INSERT INTO users(name, password) VALUES(?,?)";
        jdbcTemplate.update(sql, name, password);
    }

    public void deleteUser(String name) {
        String sql = "DELETE FROM users WHERE name = ?";
        jdbcTemplate.update(sql, name);
    }

    public void updateUser(String name, String password) {
        String sql = "UPDATE users SET password =? WHERE name = ?";
        jdbcTemplate.update(sql, password, name);
    }

    public List<User> getUsers() {
        String sql = "SELECT * FROM users";
        List<User> users = jdbcTemplate.query(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.setName(resultSet.getString("name"));
                user.setPassword(resultSet.getString("password"));
                return user;
            }
        });
        return users;
    }
}

在上面的Dao中,我们使用了Spring的JdbcTemplate,它是一个JDBC通用的DAO操作工具类,它提供了很多常用数据库操作的API,使用起来很方便。为了使用DBCP连接池,我们在Dao中注入了名为dataSource的连接池,这样JdbcTemplate在进行数据库操作的时候就会自动使用连接池中的连接。

最后,我们可以通过一个Service层来调用Dao的相关方法,如下:

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public void addUser(String name, String password) {
        userDao.addUser(name, password);
    }

    public void deleteUser(String name) {
        userDao.deleteUser(name);
    }

    public void updateUser(String name, String password) {
        userDao.updateUser(name, password);
    }

    public List<User> getUsers() {
        return userDao.getUsers();
    }
}

在这个示例中,我们使用了DBCP连接池来对MySQL数据库进行增删改查操作。其中,连接池的配置信息在程序启动时读取,连接池的初始化和销毁由程序自动管理。在具体的操作中,我们使用了Spring的IOC容器和JdbcTemplate,连接池的使用对于我们的程序来说是透明的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据库连接池之DBCP浅析_动力节点Java学院整理 - Python技术站

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

相关文章

  • layer页面跳转,获取html子节点元素的值方法

    下面是关于layer页面跳转和获取html子节点元素值的完整攻略: layer页面跳转 在网站开发过程中,layer弹窗是一个非常常用的提示框和交互框架。在进行页面跳转时,我们可以使用layer.open()方法实现,方法语法如下: layer.open({ title: ‘弹出窗口标题’, type: 2, content: ‘弹出窗口链接地址’, are…

    Java 2023年5月20日
    00
  • SpringBoot+SpringSecurity+JWT实现系统认证与授权示例

    下面是“SpringBoot+SpringSecurity+JWT实现系统认证与授权”的完整攻略: 一、什么是Spring Boot、Spring Security和JWT Spring Boot:是一个快速开发框架,能够简化Spring应用程序的创建和开发过程。 Spring Security:是Spring框架中提供的一套安全服务框架,可以用来保护Web…

    Java 2023年5月20日
    00
  • 详解Java-Jackson使用

    详解Java-Jackson使用 简介 Jackson是一个流行的Java库,用于序列化和反序列化Java对象和JSON数据。它提供了快速,灵活,易于使用的API。 本文将详细讲解在Java项目中如何使用Jackson进行序列化和反序列化,包括几个常用的场景和示例。 添加依赖 要使用Jackson,在Java项目中需要添加Jackson的依赖。可以通过在Ma…

    Java 2023年5月19日
    00
  • 基于Struts2实现防止表单重复提交

    基于Struts2实现防止表单重复提交的攻略 在Web应用程序中,表单重复提交是一个非常常见和麻烦的问题。当用户多次点击提交按钮时,可能会导致数据被重复提交,从而引发一些严重的问题,例如重复加入订单、重复发送邮件、重复插入数据库等错误操作。因此,对于Web应用程序来说,采取措施防止表单重复提交是至关重要的。 本文将介绍使用Struts2框架来实现防止表单重复…

    Java 2023年5月20日
    00
  • Javassist用法详解

    Javassist用法详解 Javassist是一个Java字节码操作库,它可以在运行时修改字节码从而对Java类进行动态编辑和代码生成。Javassist可以用于许多Java开发工具,例如实现AOP(面向切面编程)框架,实现ORM(对象关系映射)框架,实现动态代理等。 基本用法 在使用Javassist之前,我们需要在项目中引入Javassist的依赖: …

    Java 2023年5月26日
    00
  • Spring MVC-@RequestMapping注解详解

    下面就来详细讲解“Spring MVC-@RequestMapping注解详解”的完整攻略。 什么是Spring MVC @RequestMapping注解 @RequestMapping 是 Spring MVC 框架中最常用的注解之一,它可以用于方法上,用于指定 HTTP 请求的 URI,或者指定请求的方法 (GET、POST、PUT、DELETE 等)…

    Java 2023年5月16日
    00
  • Java异常 Factory method’sqlSessionFactory’rew exception;ested exception is java.lang.NoSuchMethodError:

    题目中描述的异常信息 “Factory method ‘sqlSessionFactory’ threw exception; nested exception is java.lang.NoSuchMethodError:” 实际上提供了有用的提示信息,可以作为排除问题的起点。异常信息中的 “Factory method ‘sqlSessionFactor…

    Java 2023年5月27日
    00
  • Springmvc完成ajax功能实例详解

    在 Spring MVC 中,我们可以使用 AJAX 技术来实现异步请求和响应。本文将详细讲解 Spring MVC 完成 AJAX 功能的实例,包括如何使用 @ResponseBody 注解和 ResponseEntity 类,并提供两个示例说明。 使用 @ResponseBody 注解 在 Spring MVC 中,我们可以使用 @ResponseBod…

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