Spring系列 之数据源的配置 数据库 数据源 连接池的区别
Spring系列之数据源的配置
数据源,连接池,数据库三者的区别
连接池:这个应该都学习过,比如c3p0,druid等等,连接池的作用是为了提高程序的效率,因为频繁的去创建,关闭数据库连接,会对性能有很大的消耗,所以就有了连接池,连接池顾名思义是存储多个连接的池子,池子中的连接都是创建好的,我们只要拿来使用即可,不用的时候就归还给连接池,这就大大减少了关闭创建连接的时间,提高了效率
数据库:存储数据的地方
数据源:数据源顾名思义是数据的来源,存储了连接数据库所需要的信息,也可以说是用于管理数据库连接池,并不存储真正的数据,仅仅记录了连接哪个数据库,怎么连接。如果把数据库比作一个文件的话,那么数据源存储的就是文件的名称,可以通过文件名称来找到对应的文件,算是一个抽象的映射,一个数据库对应一个数据源,数据源可能是一个连接,也可能是一个连接池
如果你是玫瑰,他就是牛粪

呸呸呸,说错了
如果数据是水,数据库就是水库,数据源就是管道,终端用户看到的数据集是管道里流出来的水。

Spring功能这么强大,怎么可能少的了数据源呢
Spring配置数据源
配置步骤:
1.导入数据源的坐标与数据库驱动坐标
2.创建数据源对象
3.设置数据源的基本连接信息
4.使用数据源获取连接或归还连接
需要导入的坐标信息
junit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
c3p0
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
spring—context
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
mysql
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
我先手动配置一波,等一下再用Spring容器经行配置,大家就能看到二者的巨大差别了
手动配置数据源
druid
public void main() throws Exception{
//创建数据源
DruidDataSource druidDataSource = new DruidDataSource();
//设置连接参数
druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
druidDataSource.setUrl("jdbc:mysql://localhost:3309/one");
druidDataSource.setUsername("root");
druidDataSource.setPassword("1234");
//获取连接对象
DruidPooledConnection connection = druidDataSource.getConnection();
System.out.println(connection);
}
c3p0
public void test2() throws Exception{
//创建数据源
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//设置连接参数
comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3309/one");
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("1234");
//获取连接对象
comboPooledDataSource.getConnection();
System.out.println(comboPooledDataSource);
}
为了降低耦合性之前我们是通过读取配置文件的方法,这里我给大家重新复习一下
首先抽取要配置的信息到配置文件
右端的字符串注意不要加双引号,否则会报错,因为他默认就是字符串
jdbc.Driver=com.mysql.jdbc.Driver
jdbc.Url=jdbc:mysql://localhost:3309/one
jdbc.Username=root
jdbc.Password=1234
再读取配置文件来创建连接池
public void test3() throws Exception{
//加载路径下的properties
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
//创建数据源
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//设置连接参数
comboPooledDataSource.setDriverClass(bundle.getString("jdbc.Driver"));
comboPooledDataSource.setJdbcUrl(bundle.getString("jdbc.Url"));
comboPooledDataSource.setUser(bundle.getString("jdbc.Username"));
comboPooledDataSource.setPassword(bundle.getString("jdbc.Password"));
//获取连接对象
comboPooledDataSource.getConnection();
System.out.println(comboPooledDataSource);
}
这样的方式很好的降低了耦合性
重点来了,下面我们来讲讲如何使用Spring来配置数据源

Spring配置数据源
将DataSource的创建权交给Spring容器去完成
DataSource有无参构造方法,Spring默认就是通过无参构造方法实例化对象
DataSource要想使用需要通过set方法设置数据库连接信息,Spring可以通过set方法进行注入
在Spring容器中配置Bean
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3309/one"/>
<property name="user" value="root"/>
<property name="password" value="1234"/>
</bean>
到容器中获取资源
public void two() throws SQLException {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");
DataSource datasource = (DataSource)classPathXmlApplicationContext.getBean("datasource");
Connection connection = datasource.getConnection();
System.out.println(connection);
}
上面的方法是不是还不够方便,我们可以用更方便的,即读取配置文件的方法
我们首先引入命名空间与约束路径
命名空间:xmlns:context="http://www.springframework.org/schema/context"
约束路径:http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
容器加载配置文件
<context:property-placeholder location="classpath:jdbc.properties"/>
配置Bean
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
以上就是Spring配置源的一些知识,有志同道合的伙伴可以关注我或者私信我加好友一同学习章,共勉
Spring系列 之数据源的配置 数据库 数据源 连接池的区别的更多相关文章
- Spring MVC 使用tomcat中配置的数据源
Spring MVC 使用tomcat中配置的数据源 配置tomcat数据源 打开tomcat目录下的conf目录,编辑sever.xml目录.在<GlobalNamingResources&g ...
- spring boot配置druid数据连接池
Druid是阿里巴巴开源项目中一个数据库连接池. Druid是一个jdbc组合,包含三个部分, 1.DruidDriver代理Driver,能够提供基于Filter-Chain模式得插件体系2.Dru ...
- SharePoint服务器将连接配置数据库的连接字符串保存在什么地方?
经常有人问我这个问题,SharePoint服务器将连接配置数据库的连接字符串保存在什么地方?虽然其他SharePoint服务器场设置都是保存到了配置数据库里面,但连接配置数据库本身的连接字符串,肯定是 ...
- Spring Boot为我们准备了最佳的数据库连接池方案,只需要在属性文件(例如application.properties)中配置需要的连接池参数即可。
Spring Boot为我们准备了最佳的数据库连接池方案,只需要在属性文件(例如application.properties)中配置需要的连接池参数即可.
- Java操作数据库——使用连接池连接数据库
Java操作数据库——使用连接池连接数据库 摘要:本文主要学习了如何使用JDBC连接池连接数据库. 传统方式和连接池方式 传统方式的步骤 使用传统方式在Java中使用JDBC连接数据库,完成一次数据库 ...
- Spring Boot系列学习文章(二) -- 配置多数据源
前言: 在上一章中,我们已经搭建好项目,现在来讲一下如何配置数据源. 由于在有的项目中,用的数据源可能会涉及多个,且是不同类型的,我们接下来就讲解多数据源的配置. 情景描述: 现有项目需要访问不同的数 ...
- Spring系列之JDBC对不同数据库异常如何抽象的?
前言 使用Spring-Jdbc的情况下,在有些场景中,我们需要根据数据库报的异常类型的不同,来编写我们的业务代码.比如说,我们有这样一段逻辑,如果我们新插入的记录,存在唯一约束冲突,就会返回给客户端 ...
- spring 5.x 系列第6篇 —— 整合 mybatis + druid 连接池 (代码配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 项目目录结构 1.创建maven工程,除了Spring基本依赖外,还需要导 ...
- spring 5.x 系列第5篇 —— 整合 mybatis + druid 连接池 (xml配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 项目目录结构 1.创建maven工程,除了Spring基本依赖外,还需要导 ...
随机推荐
- 数字货币比特币以太坊买卖五档行情数据API接口
数字货币比特币以太坊买卖五档行情数据API接口 数字货币一般包含比特币BTC.以太坊ETH.瑞波币XRP.泰达币USDT.比特币现金BCH.比特币SV.莱特币LTC.柚子币EOS.OKB. ...
- 区块链入门到实战(22)之以太坊(Ethereum) – 账号(地址)
作用: 外部账号 – 用户使用的账号,账户余额. 合约账号 – 智能合约使用的账号,每个智能合约都有一个账号,内存和账户余额 以太坊(Ethereum)网络中,有2种账号: 外部账号 – 用户使用的账 ...
- SpringBoot中关于Excel的导入和导出
前言 由于在最近的项目中使用Excel导入和导出较为频繁,以此篇博客作为记录,方便日后查阅.本文前台页面将使用layui,来演示对Excel文件导入和导出的效果.本文代码已上传至我的gitHub, ...
- Qt 改变鼠标形状
Qt 改变鼠标形状(转载) 改变鼠标形状,在绘制坐标系的时候有用到,特此记下: 1 this->setMouseTracking(true); //设置为不按下鼠标键触发moveEvent 2 ...
- vue 使用 sass 或者 less ( vue-cli 3 )
项目使用 vue-cli 3 在项目中使用 sass npm install sass-loader --save -D cnpm install sass-loader --save -D ...
- PyCharm切换解释器版本
Mac PyCharm > Preferences... > Project Interpreter > Python Interpreters Windows File->D ...
- POJ-1001-Exponentiation(高精度大数)
Problems involving the computation of exact values of very large magnitude and precision are common. ...
- ConcurrentHashMap的size方法是线程安全的吗?
前言 之前在面试的过程中有被问到,ConcurrentHashMap的size方法是线程安全的吗? 这个问题,确实没有答好.这次来根据源码来了解一下,具体是怎么一个实现过程. ConcurrentHa ...
- 微信小程序实现滚动视频自动播放(未优化)
先看看大概效果 1.首先需要了解微信API: wx.createIntersectionObserver(Object component, Object options) 创建并返 ...
- 20190923-13Linux企业真实面试题 000 021
百度&考满分 问题:Linux常用命令 参考答案:find.df.tar.ps.top.netstat等.(尽量说一些高级命令) 瓜子二手车 问题:Linux查看内存.磁盘存储.io 读写.端 ...