数据源(DataSource)是什么
数据源
数据源,简单理解为数据源头,提供了应⽤程序所需要数据的位置。数据源保证了应⽤程序与⽬标数据之间交互的规范和协议,它可以是数据库,⽂件系统等等。其中数据源定义了位置信息,⽤户验证信息和交互时所需的⼀些特性的配置,同时它封装了如何建⽴与数据源的连接,向外暴露获取连接的接⼝。应⽤程序连接数据库⽆需关注其底层是如何如何建⽴的,也就是说应⽤业务逻辑与连接数据库操作是松耦合的。 以下只讨论当数据源为数据库的情况,且为Java环境下JDBC规范下的如何建⽴与数据库的连接,其他情况类似。DriverManager
JDBC(Java DataBase Connectivity, 简称JDBC)是Java中⽤于规范应⽤程序如何来访问数据库的应⽤程序接⼝(API),它提供了查询和更新数据库中数据的⽅法。
在基于Java的应⽤程序中,我们需要使⽤JDBC驱动程序与数据库进⾏交互,其中最重要的⼀步就是获取与数据库的连接。在传统的JDBC时代,我们通常写⼀个通⽤的⽅法来封装与数据库的建⽴操作:
` public Connection getConnection() throws SQLException {
Connection conn = null;
Properties connectionProps = new Properties();
connectionProps.put("user", this.userName);
connectionProps.put("password", this.password);
//获取获取连接
源程序是指什么程序
conn = Connection(
"jdbc:" + this.dbms + "://" +
this.serverName +
":" + this.portNumber + "/",
connectionProps);
return conn;
}`
以上的代码对于早些的程序员是再熟悉不过了,我们利⽤驱动管理器为应⽤程序提供数据库连接,虽然使⽤形式简单,但有个很⼤的问题就是:程序员需要⾃⼰去写建⽴连接的操作,且该⽅法已经与我们的应⽤程序是紧耦合的,在后续需要更改数据库时,需要程序员⼿动修改这⾥。在⾯对多数据源的情况下,该⽅法可能变成了简单⼯⼚模式那种慵懒的样⼦,不符合设计模式中“对修改关闭,对扩展开放”的原则。
数据源
数据源是对数据库以及对数据库交互操作的抽象,它封装了⽬标源的位置信息,验证信息和建⽴与关闭连接的操作。数据源可以看做程序中⼀个组件,它把传统中需要在代码⾥编写配置信息和获取连接等操作抽象出⼀个规范或者接⼝,这样不同的第三⽅可以⾃⾏实现该接⼝提供不同的策略。这样,数据源就是对应⽤程序是透明的,开发者只需为应⽤程序配置特定的数据源即可与数据库进⾏连接等操作。当需要更换数据库服务器或者更换数据库种类时,只需修改配置中信息即可,⽆需修改程序代码。
数据源⼤致分为2种:不提供连接池和提供连接池管理。
不提供连接池的数据源
Spring中提供的数据源就是不提供连接池功能的,⽐如DriverManagerDataSource。该数据源对于应⽤
程序的每⼀个连接请求都建⽴新的连接,当应⽤程序使⽤完毕后,再执⾏销毁操作。当与数据库交互频繁时,这种模式会严重影响程序的性能。时间和空间消耗⼤多数消耗在连接和销毁中,⽽⾮数据库处理。所以Spring建议我们仅在测试中使⽤该数据源。以下为原话:
Only use the DriverManagerDataSource class should only be used for testing purposes since it does not provide pooling and will perform poorly when multiple requests for a connection are made.
提供连接池的数据源
提供连接池的数据源则是第三⽅提供的,⽐较流⾏的有Apache Jakarta Commons DBCP and C3P0。Spring中并不提供带池化管理的数据源,它的⽬的在于集成市⾯上优秀的数据源组件。这⾥,提个插曲,Spring的⼝号就是不与市场上优秀的第三⽅组件竞争,⽽是以包容的⼼态为他们提供平台,⽅便开发者使⽤它们。
连接池是⼀种创建和管理⼀组连接对象的技术,这些连接对象可供任何需要它的线程使⽤。连接池可以极⼤地提⾼Java应⽤程序的性能,避免了创建新的连接实例时所必需的初始化和认证时间,同时减少整体资源使⽤,可以⼤⼤提⾼并发web的响应速度。这种数据源会在初始化的时候根据⽤户配置建⽴⼀组连接。当应⽤程序与数据库交互时,就可以快速从连接池中选择⼀个空闲的连接使⽤;当使⽤完毕,把该连接归还给连接池即可。
配置
这⾥仅仅展⽰⼀下如何配置C3P0 数据源。
xml配置
在类路径下的spring中配置⽂件中,加⼊以下代码即可,其中jdbc.properties则是⼀些配置信息。
`
<context:property-placeholder location="jdbc.properties"/>`
数据源在SpringBoot中的使⽤
们知道SpringBoot中是约定优于配置,springboot提供了很多⾃动化配置的操作,⼤⼤简化了开发者在配置上花费的时间。⽐如数据源,基于版本2.1.0,SpringBoot采⽤以下算法来⾃动化配置数据源:
我们更喜欢HikariCP的性能和并发性。如果HikariCP可⽤,我们总是选择它。
否则,如果Tomcat池化DataSource可⽤,我们将使⽤它。
如果HikariCP和Tomcat池化数据源都不可⽤,并且Commons DBCP2可⽤,我们就会使⽤它。
以上都是在没有显⽰配置数据源的情况进⾏的步骤,若⼿动显⽰配置了指定数据源,则以上步骤失效。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。