mysql连接池DataSource,DruidDataSource的理解及其使用1.DataSource理论知识

博主 默语带您 Go to New World.

✍ 个人主页—— 默语 的博客👦🏻

《java 面试题大全》

🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭

《MYSQL从入门到精通》数据库是开发者必会基础之一~

🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

1.DataSource理论知识什么是数据源-DataSource

简单理解为数据源头,提供了应用程序所需要数据的位置。数据源保证了应用程序与目标数据之间交互的规范和协议,它可以是数据库,文件系统等等。其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与连接数据库操作是松耦合的。

以下只讨论当数据源为数据库的情况,且为Java环境下JDBC规范下的如何建立与数据库的连接,其他情况类似。

JDBC2.0

提供了javax.sql.DataSource接口,它负责建立与数据库的连接,当在应用程序访问数据库时不必编写连接数据库的代码,直接引用DataSource获取数据库的连接对象即可。用于获取操作数据库Connection对象。

数据源与数据连接池的关系

数据源DataSource建立多个数据库连接池Connection Pool,这些数据库连接(Connection)会保存在数据连接池中,当需要访问数据库时,只需要你从数据库连接池中获取空闲的数据库的连接,当程序员访问数据库结束时,数据连接会放回数据库连接池中。

数据库连接池的优势

传统的JDBC访问数据库技术,每次访问数据库都需要通过数据库驱动器Driver和数据库名称以及密码等等资源建立数据库连接。这样的连接存在俩大问题:1.频繁的建立数据库连接与断开数据库,会消耗大量的资源和时间,降低效率。2,数据库的连接需要用户名和密码等等。这些需要一定的内存和cpu一定开销。

代码语言:javascript代码运行次数:0运行复制DataSource source = new DataSource();我们进入到他的源码去看下

原版

代码语言:javascript代码运行次数:0运行复制/*

* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

*/

package javax.sql;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.Wrapper;

/**

*

A factory for connections to the physical data source that this

* {@code DataSource} object represents. An alternative to the

* {@code DriverManager} facility, a {@code DataSource} object

* is the preferred means of getting a connection. An object that implements

* the {@code DataSource} interface will typically be

* registered with a naming service based on the

* Java™ Naming and Directory (JNDI) API.

*

* The {@code DataSource} interface is implemented by a driver vendor.

* There are three types of implementations:

*

    *

  1. Basic implementation -- produces a standard {@code Connection}

    * object

    *

  2. Connection pooling implementation -- produces a {@code Connection}

    * object that will automatically participate in connection pooling. This

    * implementation works with a middle-tier connection pooling manager.

    *

  3. Distributed transaction implementation -- produces a

    * {@code Connection} object that may be used for distributed

    * transactions and almost always participates in connection pooling.

    * This implementation works with a middle-tier

    * transaction manager and almost always with a connection

    * pooling manager.

    *

*

* A {@code DataSource} object has properties that can be modified

* when necessary. For example, if the data source is moved to a different

* server, the property for the server can be changed. The benefit is that

* because the data source's properties can be changed, any code accessing

* that data source does not need to be changed.

*

* A driver that is accessed via a {@code DataSource} object does not

* register itself with the {@code DriverManager}. Rather, a

* {@code DataSource} object is retrieved though a lookup operation

* and then used to create a {@code Connection} object. With a basic

* implementation, the connection obtained through a {@code DataSource}

* object is identical to a connection obtained through the

* {@code DriverManager} facility.

*

* An implementation of {@code DataSource} must include a public no-arg

* constructor.

*

* @since 1.4

*/

public interface DataSource extends CommonDataSource, Wrapper {

/**

*

Attempts to establish a connection with the data source that

* this {@code DataSource} object represents.

*

* @return a connection to the data source

* @exception SQLException if a database access error occurs

* @throws java.sql.SQLTimeoutException when the driver has determined that the

* timeout value specified by the {@code setLoginTimeout} method

* has been exceeded and has at least tried to cancel the

* current database connection attempt

*/

Connection getConnection() throws SQLException;

/**

*

Attempts to establish a connection with the data source that

* this {@code DataSource} object represents.

*

* @param username the database user on whose behalf the connection is

* being made

* @param password the user's password

* @return a connection to the data source

* @exception SQLException if a database access error occurs

* @throws java.sql.SQLTimeoutException when the driver has determined that the

* timeout value specified by the {@code setLoginTimeout} method

* has been exceeded and has at least tried to cancel the

* current database connection attempt

* @since 1.4

*/

Connection getConnection(String username, String password)

throws SQLException;

}翻译版本

代码语言:javascript代码运行次数:0运行复制/*

版权所有(c) 2000年,2013年,甲骨文和/或其附属公司。保留所有权利。

* ORACLE专有/保密。使用受许可条款的约束。

*/

package javax.sql;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.Wrapper;

/**

连接到此物理数据源的工厂

* {@code DataSource}对象表示。的替代方案

* {@code DriverManager}工具,一个{@code DataSource}对象

*是获得连接的首选方式。一个对象,它实现

{@code DataSource}接口通常是

注册了一个命名服务

* Java™命名和目录(JNDI) API。

* < P >

{@code DataSource}接口由驱动程序供应商实现。

*有三种实现类型:

* < OL >

基本实现——生成一个标准的{@code连接}

*对象

*

  • 连接池实现——产生一个{@code连接}

    *将自动参与连接池的对象。这

    *实现与中间层连接池管理器一起工作。

    *

  • 分布式事务实现——生成一个

    *可用于分布式的{@code Connection}对象

    *事务和几乎总是参与连接池。

    这个实现与中间层一起工作

    *事务管理器,几乎总是与连接

    *池经理。

    * < / OL >

    * < P >

    一个{@code DataSource}对象具有可以修改的属性

    *在必要的时候。例如,如果数据源被移动到不同的

    * server,服务器的属性可以更改。好处是

    *因为数据源的属性可以修改,任何代码都可以访问

    *该数据源不需要更改。

    * < P >

    通过{@code DataSource}对象访问的驱动程序不会

    *注册自己的{@code DriverManager}。相反,一个

    *通过查找操作检索{@code DataSource}对象

    *,然后用来创建一个{@code Connection}对象。一个基本

    通过{@code DataSource}获得的连接

    对象与通过

    * {@code DriverManager}设施。

    * < p >

    {@code DataSource}的实现必须包含一个公共的无参数

    *构造函数。

    以上翻译结果来自有道神经网络翻译(YNMT)

    逐句对照

    *

    * @since 1.4

    */

    public interface DataSource extends CommonDataSource, Wrapper {

    /**

    *

    尝试建立与数据源的连接

    {@code DataSource}对象表示。

    返回到数据源的连接

    如果数据库访问错误发生,@exception SQLException

    当驱动程序确定java.sql.SQLTimeoutException时

    *由{@code setLoginTimeout}方法指定的超时值

    *已超过,并至少试图取消

    当前的数据库连接尝试

    以上翻译结果来自有道神经网络翻译(YNMT)

    */

    Connection getConnection() throws SQLException;

    /**

    *

    尝试建立与数据源的连接

    {@code DataSource}对象表示。

    @param用户名代表连接的数据库用户

    *由

    @param password用户的密码

    返回到数据源的连接

    如果数据库访问错误发生,@exception SQLException

    当驱动程序确定java.sql.SQLTimeoutException时

    *由{@code setLoginTimeout}方法指定的超时值

    *已超过,并至少试图取消

    当前的数据库连接尝试

    * @since 1.4

    以上翻译结果来自有道神经网络翻译(YNMT)

    */

    Connection getConn*

    尝试建立与数据源的连接

    {@code DataSource}对象表示。

    @param用户名代表连接的数据库用户

    *由

    @param password用户的密码

    返回到数据源的连接

    如果数据库访问错误发生,@exception SQLException

    当驱动程序确定java.sql.SQLTimeoutException时

    *由{@code setLoginTimeout}方法指定的超时值

    *已超过,并至少试图取消

    当前的数据库连接尝试

    * @since 1.4

    */

    以上翻译结果来自有道神经网络翻译(YNMT)

    ection(String username, String password)

    throws SQLException;

    }我们可以根据上面的内容得出

    DataSource 是作为为数据源,它是 jdk 提供的一个接口,然后只提供了两个 getConnection 方法,分别是无参数构造(无需参数)和有参构造(需要传入用户名和密码)。所以说它是跟数据库连接有关的东西,可以通过它来获取数据库连接。

    datasource的实现方式

    基本数据源(不支持连接池和分布式连接池的数据源(支持连接池的处理连接,连接能够重复利用)分布式的数据源(支持分布式的事务,一个事务能够访问更多数据库服务)但是这只是一个接口,具体怎么获取到数据库连接,还是由实现它的子类来决定。本文就是来讲一下 DruidDataSource,

    未完;…

  • top
    Copyright © 2088 篮球世界杯美国队名单_意大利世界杯预选赛 - pyqtui.com All Rights Reserved.
    友情链接