连接池&Spring事务

一、连接池

1、为什么要连接池?

        1、Java程序操作数据库,必须获得一个连接Connection

        2、实际操作中,先获得连接,使用完成关闭连接。这两个操作都比较耗时。

        3、公用连接,某一个连接在使用时只能给一个人

2、什么是连接池?

        定义:一组连接组成的一个池子(集合),称为连接池。

        连接池工作原理:

                1、连接池有几个连接?初始化值设置

                2、如果需要的连接比池子中的多会怎么办?自动创建设置

                3、如果新添加连接,一次添加一个?用创建个数设置

                4、是否可以无限添加?用最大值设置

                5、如果都归还连接?用最小值设置

3、连接池规范

javaEE规范规定,连接池必须实现javax.sql.DataSource

        接口中规定方法:getConnection()

        常见的第三方连接池

1、C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。hibernate框架底层使用。(等效框架Mybatis)

2、阿里巴巴-德鲁伊druid连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该连接池稳定、性能好。

3、DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。

4、使用Druid

1、导入jar包

方式1:直接导入jar包

 

方式2:导入坐标

 2、入门案例

        1、核心类

        2、编写基本参数

        3、特殊配置

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.junit.Test;

import java.sql.SQLException;


public class TestDruid {
    @Test
    public void testDemo() throws SQLException {
        //1 获得连接池
        //1.1 核心类
        DruidDataSource dataSource = new DruidDataSource();
        //1.2 基本4项
        //  1) 驱动
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        //  2) 连接
        dataSource.setUrl("jdbc:mysql://localhost:3306/ssm_db1");
        //  3) 用户
        dataSource.setUsername("root");
        //  4) 密码
        dataSource.setPassword("1234");
        //1.3 特殊项【可选】
        // 1) 初始化大小
        dataSource.setInitialSize(5);
        // 2) 最大值活动数
        dataSource.setMaxActive(10);
        // 3) 最小空闲数
        dataSource.setMinIdle(2);

        //2 从连接池中获得连接
        DruidPooledConnection conn = dataSource.getConnection();
        System.out.println(conn);
        conn.close();

        DruidPooledConnection conn2 = dataSource.getConnection();
        System.out.println(conn2);
        conn2.close();
    }
}

二、事务管理

1、事务的作用

保证一组操作要么全都成功,对数据库进行完整更新。要么在某一个动作失败的时候让数据恢复原状,不会引起不完整的修改。

2、事务的特性ACID

        1、原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

        2、一致性(Consistency)事务前后数据的完整性必须保持一致。

        3、 隔离性(Isolation)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

        4、 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

3、事务的隔离问题有哪些?

        1、脏读:一个事务读到另一个事务没有提交的数据。

        2、不可重复读:一个事务读到另一个事务已经提交的数据(update)

        3、幻读:一个事务读到另一个事务已经提交的数据(insert)

4、事务的隔离级别有哪些?

        1、读未提交 read uncommited:一个事务读到另一个事务没有提交的数据。存在3个问题,解决0个问题

        2、读已提交 read commited:一个事务读到另一个事务已经提交的数据。存在2个问题,解决1个问题(脏读)。

        3、可重复读 repeatable read:在一个事务中读到的数据重复的。存在1个问题,解决2给我问题(脏读、不可重复读)。

       4、串行化 Serializable:单事务。存在0个问题,解决3个问题(脏读、不可重复读、幻读)。

        1、隔离级别对比

        性能:–read uncommitted > read committed > repeatable read > Serializable

        安全:–read uncommitted < read committed < repeatable read < Serializable

        2、默认隔离级别

        mysql:repeatable read

        Oracle:read committed

5、事务的传播行为

        1、required必要的:支持当前事务,A有B用,A无B创建

        2、supports支持的:支持当前事务,A有B用,A无B非事务执行

        3、mandatory强制的:支持当前事务,A有B用,A无B报错

        4、required_new必须有一个新的:创建一个新事务,A有B挂起并创建,A无B创建

        5、not_supported不支持:不支持当前事务,A有挂起B以非事务执行,A无B以非事务执行

        6、never从不:不支持当前事务,A有B报错,A无B非事务执行

        7、nested嵌套:嵌套事务,底层使用savepoint进行嵌套事务操作,保存点允许回顾部分事务(不重要)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值