首先数据源就是为了提高程序的性能而出现的。连接池的作用是为了提高性能,避免重复多次的打开数据库连接而曹诚性能的下降和系统资源的浪费;连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建和销毁的过程。这样以提高系统的性能。
数据源的开发步骤:
1,导入数据源的坐标和数据库驱动坐标
2,创建数据源对象
3,设置数据源的基本连接数据
4,使用数据源获取连接资源和归还连接资源
使用连接池的优势:
1、资源复用:由于数据库连接得到重用,避免了频繁创建、释放引起的大量性能开销。在减少系统消耗的基础上,在另一方面也增进了系统运行环境的平稳性(减少内存碎片及数据库临时进程/线程的数量)
2、更快的系统响应速度:数据库连接池在初始化过程中,往往已经创建了若干个数据库连接置于池中备用,此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有的可用连接,避免了数据库连接初始化和释放过程的时间,从而缩减了系统整体相应时间。
3、统一的连接管理,避免数据库连接泄露:在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接,从而避免了常规数据库连接操作中可能出现的额资源泄露。
下面我们就对配置c3p0和druid两个连接池进行讲解:
首先是我们传统的手动配置:
1,我们首先要导入MySQL驱动,以及c3p0和druid两个的j坐标,以及我们需要测试导入junit的坐标
这里需要注意的是我们导入的mysql的坐标,它的版本号要跟你现在用的mysql的版本号一致,不然的话是连接不成功的,
怎么查看你现在的Mysql版本呢?我们打开navicat,找到连接好的数据库,右击找到连接信息点开就能看到了
然后在pom.xml文件中导入相应的版本。
接下来我们手动创建连接c3p0(也就是传统的方法)
这里我们为了证明连接成功,我们就打印连接对象,只要它不是空的,就证明我们连接 成功
同样我们对druid也来进行手动的创建(传统方法),跟上面的c3p0是一模一样的,只是实现类不一样了而已
同样这里我们为了证明连接成功,我们就打印连接对象,只要它不是空的,就证明我们连接 成功
在这里我们发现,在连接这个数据源的时候,我们设置了数据库的基本参数,如果我们以后要更换数据库的话就需要找到源码来进行修改,说明我们这个是耦合死了的,不好更改
ComboPooledDataSource dataSource=new ComboPooledDataSource(); //四个基本的连接参数(只要要连接就必须要有这四个参数) dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUser("root"); dataSource.setPassword("root"); Connection connection=dataSource.getConnection(); System.out.println(connection); dataSource.close();
接下来我们就进行解耦合:通过properties配置文件来进行解耦合(properties文件里面也是通过键值对的形式来进行存储的)
首先我们在resource文件中创建properties文件:
在properties文件中以键值对的形式来进行存储基本的连接参数
然后我们创建一个test方法来进行验证连接
这里我们通过ResourceBundle rb=ResourceBundle.getBundle("jdbc"); 来读取配置文件,这个是JAVA自带的(在util包下),然后里面的参数是可以把后缀名properties给省掉的,因为这个就是专门用来读取properties文件的。所以我们只需要前面的名字就可以了。
接下来我们把properties配置文件中的连接参数给取出来,存放到String中,然后再传给下面的连接。虽然代码变多了,但是我们进行了一定的解耦合,我们如果需要修改数据库的话就不需要去找源码了,我们只要去properties配置文件中修改就可以了。
上面都只是铺垫,接下来才是重点我们通过Spring来配置数据源,通过容器产生对象来配置
第一步搭建spring的环境,导入坐标在pom.xml文件中
第二步 本应该是创建接口和实现类,但在这里我们直接用的是第三方jar包,所以这里就可以还省 略掉了
第三步:创建xml文件
第四步:配置Bean
数据源的连接参数其实就是 ComboPooledDataSource 的属性,我们通过依赖注入的方式在容器中注入进去。
下一步测试:
这里我们是通过spring容器来获取的对象,并且我们在配置文件的时候我们已经通过依赖注入的方式,把连接参数已经注入了进去。
但是我们在spring容器中直接写的连接参数,我们通过spring来加载properties文件,因为我们有个习惯,我们把各自的工作分开
接下来我们来了解spring加载properties文件。
在spring中加载properties文件:并且通过el表达式获取properties中的参数
测试:
经过测试我们发现同样是能获取到数据源的连接池