数据源作用以及spring配置数据源

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

数据源

数据源简单理解为数据源头提供了应用程序所需要数据的位置。数据源保证了应用程序与目标数据之间交互的规范和协议它可以是数据库文件系统等等。其中数据源定义了位置信息用户验证信息和交互时所需的一些特性的配置同时它封装了如何建立与数据源的连接向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的也就是说应用业务逻辑与连接数据库操作是松耦合的。 以下只讨论当数据源为数据库的情况且为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 = DriverManager.getConnection(
                   "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的响应速度。这种数据源会在初始化的时候根据用户配置建立一组连接。当应用程序与数据库交互时就可以快速从连接池中选择一个空闲的连接使用当使用完毕把该连接归还给连接池即可。

Spring配置数据源

导入druid的坐标

<!-- Druid连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

导入mysql数据库驱动坐标

<!-- mysql驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

提取jdbc.properties配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

可以将DataSource的创建权交由Spring容器去完成

DataSource有无参构造方法而Spring默认就是通过无参构造方法实例化对象的

DataSource要想使用需要通过set方法设置数据库连接信息而Spring可以通过set方法进行字符串注入

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>
</bean>

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring