spring整合使用xml方式整合Druid数据源连接池

1.普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求 一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很 好的重复利用。若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严 重的甚至会造成服务器的崩溃。
2. 对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统 中的内存泄漏,最终将导致重启数据库。
3.这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内 存泄漏,服务器崩溃。
4.数据库连接池技术 为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。

数据库连接池的基本思想:就是为数据库连接建立一个"缓冲池"。预先在缓冲池中放入一定数量的连接,当需要

建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去。

5.数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重 新建立一个。

6 . 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库

连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池

的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连 接数量时,这些请求将被加入到等待队列中。

1.导入必要依赖

xml 复制代码
		<!--mysql依赖-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>

        <!-- druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.23</version>
        </dependency>
        <!--spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.12</version>
        </dependency>
        <!--spring操作jdbc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.1.12</version>
        </dependency>

2. 创建spring配置文件(applicationContext.xml)

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 整合Druid数据源连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- 注入相关的连接属性 -->
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/demo?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;timeZone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
        <!-- 连接池的属性配置-->
        <!-- 最大连接池数量-->
        <property name="maxActive" value="200"/>
        <!-- 初始化连接池的时候建立的连接个数-->
        <property name="initialSize" value="10"/>
        <!-- 连接池最小连接数-->
        <property name="minIdle" value="10"/>
        <!-- 获取连接的最大等待时间,单位:毫秒-->
        <property name="maxWait" value="2000"/>
        <!-- 检测连接是否有效-->
        <property name="testWhileIdle" value="true"/>
        <property name="testOnReturn" value="false"/>
        <!-- 用一条伪sql来检查连接-->
        <property name="validationQuery" value="select 1"/>
        <!-- 是否缓存PreparedStatement,mysql中建议关闭-->
        <property name="poolPreparedStatements" value="false"/>
    </bean>
</beans>

3.编写main方法

java 复制代码
public class Main {

    public static void main(String[] args) throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从容器中获取数据源连接池(Druid实现)
        DataSource dataSource = context.getBean("dataSource", DataSource.class);
        //可以强转为DruidDataSource
        DruidDataSource ds = (DruidDataSource) dataSource;
        //从池中获取连接(当第一次获取连接时才初始化)
        Connection connection = ds.getConnection();
        System.out.println("池大小:" + ds.getPoolingCount());
        connection.close();
        System.out.println("池大小:" + ds.getPoolingCount());
    }
}

4. 测试结果

spring整合druid连接池完成

相关推荐
小海编码日记14 分钟前
Java八股-JVM & GC
java
全职计算机毕业设计20 分钟前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
东阳马生架构26 分钟前
商品中心—1.B端建品和C端缓存的技术文档
java
Chan1628 分钟前
【 SpringCloud | 微服务 MQ基础 】
java·spring·spring cloud·微服务·云原生·rabbitmq
LucianaiB31 分钟前
如何做好一份优秀的技术文档:专业指南与最佳实践
android·java·数据库
面朝大海,春不暖,花不开1 小时前
自定义Spring Boot Starter的全面指南
java·spring boot·后端
得过且过的勇者y1 小时前
Java安全点safepoint
java
夜晚回家2 小时前
「Java基本语法」代码格式与注释规范
java·开发语言
斯普信云原生组2 小时前
Docker构建自定义的镜像
java·spring cloud·docker
wangjinjin1802 小时前
使用 IntelliJ IDEA 安装通义灵码(TONGYI Lingma)插件,进行后端 Java Spring Boot 项目的用户用例生成及常见问题处理
java·spring boot·intellij-idea