精华内容
下载资源
问答
  • 2021-03-16 16:27:32

    Connection对象也称为连接对象,用来创建一个与指定数据源的连接,包括Microsoft SQL server、Oracle以及能够为其指明一个OLEDB提供程序或一个ODBC驱动器的任何数据源。不同的.NET数据提供程序都有自已的连接类。

    .NET数据提供程序相应的连接类:

    * OLE DB数据提供程序——OleDbConnection

    * ODBC数据提供程序——OdbcConnection

    * SQL Server数据提供程序——SqlConnection

    * Oracle数据提供程序——OracleConnection

    Connection对象的常用属性如表

    属性

    说明

    ConnectionString

    获取或设置用来打开数据库的字符串

    ConnectionTimeout

    获取与数据库尝试建立连接的超时时间,类型为int,单位为秒,默认值为15秒

    Database

    获取当前连接所使用的数据库名称,类型为String

    DataSource

    获取数据源。对于SQLConnection对象,返回的是连接的SQL Server实例名称;对于OleDbConnection对象返回的是数据源的路径及文件名

    Provider

    返回OLE DB Provider的名字,此属性仅用于OLE DB.NET数据源

    ServerVersion

    返回数据库的版本信息

    State

    获得当前连接状态:打开或关闭。默认为关闭

    Connection连接对象的方法表

    方法

    说明

    BeginTransaction

    打开一个数据库事务。允许指定事务的名称和隔离级

    ChangeDatabase

    改变当前连接的数据库。需要一个有效的数据库名称

    Close

    关闭数据库连接。使用该方法关闭一个打开的连接

    CreateCommand

    创建并返回一与该连接关联的Command对象

    Dispose

    在显示释放对象时关闭数据库连接

    Open

    打开一个数据库连接

    注意:如果Connection连接对象连接超出范围,并不会自动关闭。垃圾回收程序会收集该对象实例,但不会关闭连接。因此,必须在连接对象超出范围之前,通过调用Close或Dispose方法,显示地关闭连接。

    更多相关内容
  • 数据连接对象简介

    千次阅读 热门讨论 2018-08-29 20:37:09
    Connection对象,也成为连接对象,他的功能就是负责对数据源连接,Connection的基类都是DbConnection类 Connection的两重要的属性: ConnectionString:表示用于打开SQL Server的数据库的字符串 State:...

    Connection

    Connection对象,也成为连接对象,他的功能就是负责对数据源的连接,Connection的基类都是DbConnection类

    Connection的两个重要的属性:

      • ConnectionString:表示用于打开SQL Server的数据库的字符串
      • State:表示Connection的状态,有Close和Open两种状态

     

    Command

    Command对象,也成为数据库命令对象,它的主要功能就是执行对数据的增删改查,同时也可以用来执行存储过程

    Command对象主要有三个方法:

      • ExecuteNonQuery():执行一个SQL语句,返回受影响行数,这个方法主要用于对数据库的增、删、改,不用于对数据的查询操作。
      • ExecuteReader():执行一个查询的SQL语句,返回一个DataReader对象。
      • ExecuteScqlar():从数据库中检索单个值。这个方法主要用于统计操作。

     

    DataReader

    DataReader对象,它是一个读取行的只读流的方式,绑定数据时比使用数据集方式性能要高,因为它是只读的,所以需要对数据库中的数据库的修改就需要使用其他方法。

    DataReader不能直接通过实例化获得,必须借助于相关的Command对象来创建实例,可以通过SqlCommand的实例的ExecuteReader()方法创建SqlDataReader实例。

    DataReader 对象读取数据有三种方式:

    • 按查询的时候列的索引用指定的方式来读取列值,无需做相应转换,如 GetByte(int i)就是读取第 i 列的值并且转换成 byte 类型的值。 这种方法的优点是指定列后直接将该列读取出来了,无需再转换,缺点是一旦指定的列不能按照指定的方式转换时就会抛出异常,比如数据库里字段的类型是 string 类型或者该字段的值为空时按照 GetByte(i)这种方式读取会抛出异常。
    • 按照列索引的方式读取,在读取的时候并不进行值转换,如:reader[5]就是读取第5列的值(这里reader是一个Reader对象的实例),这样得到的值是一个 object类型的值,这也很好理解,因为在数据库可能存储各种类型的值,而 object 是所有类的基类,所以这个方法不会抛出异常。如果要得到它的正确类型,还需要根据数据库里的字段进行相应转换。
    • 按照列名的方式去读,并且在读的时候也不进行相应转换,得到的是 object类型的值。

     

    综合前面三种方式各有特点:

    第一种方式最直接,但是有可能抛出异常;

    第二种方式比第一种稍微灵活一些,我们可以根据读取到值为空(在.net 里用 DBNull 类来表示,可以表示数据库中任意数据类型的空值),我们就不进行相应的类型转换,避免出现异常;

    第三种方式按照列的名字来读取数据,也需要按照第二种方式进行一定的转换。

     

    就性能来说第一种最高,第二种稍低,第三种最低(这很好理解,假设要在一个旅馆里找人,通过房间号找肯定比通过名字找快);

    就灵活性来说第三种最灵活,第二种次之,第一种最不灵活(假如在后来编写 SQL 语句中更改了列的索引,第一种和第二种都可能出现问题)。

    实际开发中根据实际情况选择合适的方式。

     

    DataAdapter

    DataAdapter对象,也成为数据适配器对象,它利用数据库连接对象(Connection)连接的数据源,使用数据库命令对象(Command)规定的操作从数据源中检索出数据送往数据集对象(DataSet),或者将数据集中经过编辑后的数据送回数据源。

    使用dataAdapter调用Fill()方法,将使用与之相关联的命令组建所指定的SELECT语句从数据源中进行检索。然后将行中的数据添加到DataSet中的DataTable对象中或者直接填充到DataTable的示例中,如果DataTable对象不存在,则自动创建该对象。

    当执行上述SELECT语句时,与数据库的链接必须有效,但不需要用语句将连接对象打开。如果调用Fill()方法之前与数据库的连接已经关闭,则将自动打开它以检索数据,执行完毕后在自动将其关闭。如果调用Fill()方法之前连接对象已经打开,则检索后继续保持打开状态。

    注意:一个数据集中可以防止多张数据表。但是每个数据适配器只能够对应于一张数据表。

     

    DataSet

    DataSet对象,也称为数据集对象,用于表示那些存储在内存中的数据,它相当于一个内存中的数据库。它可以包括多个DataTable对象以及DataView对象。DataSet主要用于管理存储在内存中的数据以及对数据的断开操作。

    由于DataSet对象提供了有一个离线的数据源,这样减轻了数据库以及网络的负担,在设计程序的时候可以讲DataSet对象作为程序的数据源。

     

    DataTable

    DataTable对象,它相当于一张数据表,同样包括行和列。可以使用DataRow与DataColumn来分别代表行和列。

     

    文章来自asp夜话,略有修改,其他内容不再展示,详情请点击此处

    展开全文
  • Java的数据库连接性能对比 JDBC: ...它不属于某一个数据库的接口,而是可以用于定义程序数据库连接规范,通过整套接口,由各个不同的数据库厂商去完成所对应的实现类,由sun公司提出! 步...

    Java的数据库连接性能对比

    JDBC:

    1. jdbc - 全名是 Java data base connectivity;翻译为 Java数据库连接
    2. 它是一个面向对象的程序接口(API);可以通过它访问到各类的 关系型数据库[注意:关系型数据库]
    3. 它不属于某一个数据库的接口,而是可以用于定义程序与数据库连接规范,通过一整套接口,由各个不同的数据库厂商去完成所对应的实现类,由sun公司提出!
    步骤:
    1. 类加载
    2. 获取连接
    3. 书写SQL
    4. 执行语句
    5. 处理结果集
    
    为什么会有连接池的存在?

    因为建立数据库连接是一个非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去,极大的提高了数据库连接的性能问题,节省了资源和时间。

    数据源

    什么是数据源

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

    数据源与数据库连接池组件

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

    常用的数据库连接池技术:

    C3P0、DBCP、Proxool和Druid

    1. C3P0、DBCP和Druid是什么?
    • c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

      • hibernate开发组推荐使用c3p0;
      • c3p0所需jar:c3p0-0.9.2.1.jar mchange-commons-java-0.2.3.4.jar
    • DBCP是 apache 上的一个 java 连接池项目,是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP

      • dbcp所需jar:commons-dbcp.jarcommons-pool.jar
    • Druid是阿里巴巴出品的数据源,而且是淘宝和支付宝专用数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个 SQL Parser。

      1. Druid是阿里开源的连接池,可以说是Java语言中最好的数据库连接池.Druid能够提供**强大的日志监控扩展功能,是为监控而生**的数据库连接池!【主要是监控DB池连接和SQL的执行情况】
      2. Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
      3. Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便
      4. 简单SQL语句执行耗时10微秒以内,复杂SQL耗时30微秒
      5. 通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。
      6. Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。
    • 在Maven中的依赖为:

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.9</version>
      </dependency>
      
    • DRUID连接池使用的jar包:druid-1.0.9.jar

    2. C3P0与DBCP的区别?
    • c3p0有自动回收空闲连接功能

      dbcp没有自动回收空闲连接功能

    • 两者主要是对数据连接的处理方式不同!

      • C3P0提供最大空闲时间,当连接超过最大空闲连接时间时,当前连接就会被断掉
      • DBCP提供了最大连接数,当连接数超过最大连接数时,所有连接都会被断开
    3. C3P0的底层运行机制?
    • c3p0所引用的类是:ComboPooledDataSource
    • ComboPooledDataSource会从pool里获取到的connection,而这个是connection的根本应该是proxy包装的connection,会对connection的释放或者重用,是pool的管理责任:初始化池大小,维护池的大小
    4. DBCP的底层运行机制?
    • dbcp可以采用数据源的方式进行获取连接,进行管理;

    • dbcp中的BasicDataSourceFactory类实现了DataSource接口,自然可以获取到数据库连接

    • BasicDataSourceFactory中有三种方法:getOjectInstance、createDataSource以及getProperties

      通常情况,采用的是createDataSource方法读取数据库连接参数连接事务参数 数据池连接参数等。

    附表:

    DBCPc3p0Druid
    用户名usernameuserusername
    密码passwordpasswordpassword
    URLurljdbcUrljdbcUrl
    驱动类名driverClassNamedriverClassdriverClassName
    DBCPc3p0Druid
    最小连接数minIdle(0)minPoolSize(3)minIdle(0)
    初始化连接数initialSize(0)initialPoolSize(3)initialSize(0)
    最大连接数maxTotal(8)maxPoolSize(15)maxActive(8)
    最大等待时间maxWaitMillis(毫秒)maxIdleTime(0秒)maxWait(毫秒)
    DBCPc3p0Druid
    开启缓存功能poolPreparedStatementsmaxStatementspoolPreparedStatements
    单个连接拥有的最大缓存数maxOpenPrepared- StatementsmaxStatementsPer- ConnectionmaxOpenPrepared- Statements

    连接有效性检测设置:

    连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。如果当前连接池中某 个连接在空闲了timeBetweenEvictionRunsMillis时间后任然没有使用,则被物理性的关闭掉。有些数据库连接的时候有超时限制 (mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,这时候设置一个testWhileIdle参数为true, 可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了 保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。

    DBCPc3p0Druid
    申请连接检测testOnBorrowtestConnectionOnCheckintestOnBorrow
    是否超时检测testWhileIdletestWhileIdle
    空闲时间timeBetweenEvictionRunsMillisidleConnectionTestPeriodtimeBetweenEvictionRunsMillis
    校验用sql语句validationQuerypreferredTestQueryvalidationQuery
    归还连接检测testOnReturntestConnectionOnCheckouttestOnReturn

    超时连接关闭设置:

    removeAbandoned参数,用来检测到当前使用的连接是否发生了连接泄露,所以在代码内部就假定如果一个连接建立连接的时间很长,则将其认定为泄露,继而强制将其关闭掉。

    DBCPc3p0Druid
    是否超时关闭连接removeAbandonedbreakAfterAcquireFailureremoveAbandoned
    超时时间removeAbandonedTimeoutcheckoutTimeoutremoveAbandonedTimeout
    是否记录日志logAbandonedlogAbandoned

    c3p0重连设置:

    设置获取连接失败后,是否重新连接以及间隔时间。

    DBCPc3p0Druid
    重连次数acquireRetryAttempts
    间隔时间acquireRetryDelay

    各个连接池的属性说明  DBCP 属性说明表

    属性(Parameter)默认值(Default)描述(Description)
    username传递给JDBC驱动的用于建立连接的用户名(The connection username to be passed to our JDBC driver to establish a connection.)
    password传递给JDBC驱动的用于建立连接的密码(The connection password to be passed to our JDBC driver to establish a connection.)
    url传递给JDBC驱动的用于建立连接的URL(The connection URL to be passed to our JDBC driver to establish a connection.)
    driverClassName使用的JDBC驱动的完整有效的java 类名(The fully qualified Java class name of the JDBC driver to be used.)
    defaultAutoCommitdriver default连接池创建的连接的默认的auto-commit状态,没有设置则不会自动提交(The default auto-commit state of connections created by this pool. If not set then the setAutoCommit method will not be called.)
    initialSize0初始化连接:连接池启动时创建的初始化连接数量(The initial number of connections that are created when the pool is started.
    maxTotal8最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制(The maximum number of active connections that can be allocated from this pool at the same time, or negative for no limit.)
    maxIdle8最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制(The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.)
    minIdle0最小空闲连接:连接池中容许保持空闲状态的最小连接数量,负数表示没有现在(The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.)
    注意:如果在某些负载比较大的系统中将maxIdel设置过小时,很可能会出现连接关闭的同时新连接马上打开的情况.这是由于关闭连接的线程比打开的快导致的.所以,对于这种系统中,maxIdle的设定值是不同的但是通常首选默认值
    (NOTE: If maxIdle is set too low on heavily loaded systems it is possible you will see connections being closed and almost immediately new connections being opened. This is a result of the active threads momentarily closing connections faster than they are opening them, causing the number of idle connections to rise above maxIdle. The best value for maxIdle for heavily loaded system will vary but the default is a good starting point.)
    maxWaitMillisindefinitely最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常,如果设置为-1表示无限等待(The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely.)
    validationQuerySQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录(The SQL query that will be used to validate connections from this pool before returning them to the caller. If specified, this query MUST be an SQL SELECT statement that returns at least one row. If not specified, connections will be validation by calling the isValid() method.)
    testOnCreatefalse指明是否在建立连接之后进行验证,如果验证失败,则尝试重新建立连接(The indication of whether objects will be validated after creation. If the object fails to validate, the borrow attempt that triggered the object creation will fail.)
    testOnBorrowtrue指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串(The indication of whether objects will be validated before being borrowed from the pool. If the object fails to validate, it will be dropped from the pool, and we will attempt to borrow another.)
    testOnReturnfalse指明是否在归还到池中前进行检验(The indication of whether objects will be validated before being returned to the pool.)
    testWhileIdlefalse指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串(The indication of whether objects will be validated by the idle object evictor (if any). If an object fails to validate, it will be dropped from the pool.)
    timeBetweenEviction- RunsMillis-1在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位.如果设置为非正数,则不运行空闲连接回收器线程(The number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run.)
    numTestsPerEvictionRun3在每次空闲连接回收器线程(如果有)运行时检查的连接数量(The number of objects to examine during each run of the idle object evictor thread (if any).)
    minEvictableIdleTime-Millis10006030连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒(The minimum amount of time an object may sit idle in the pool before it is eligable for eviction by the idle object evictor (if any).)
    softMiniEvictableIdle- TimeMillis-1说明(The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least “minIdle” connections remain in the pool. When miniEvictableIdleTimeMillis is set to a positive value, miniEvictableIdleTimeMillis is examined first by the idle connection evictor - i.e. when idle connections are visited by the evictor, idle time is first compared against miniEvictableIdleTimeMillis (without considering the number of idle connections in the pool) and then against softMinEvictableIdleTimeMillis, including the minIdle constraint.)
    maxConnLifetimeMillis-1说明(The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.)
    logExpiredConnectionstrue说明(Flag to log a message indicating that a connection is being closed by the pool due to maxConnLifetimeMillis exceeded. Set this property to false to suppress expired connection logging that is turned on by default.
    connectionInitSqlsnull说明(A Collection of SQL statements that will be used to initialize physical connections when they are first created. These statements are executed only once - when the configured connection factory creates the connection.)
    infotrue说明(True means that borrowObject returns the most recently used (“last in”) connection in the pool (if there are idle connections available). False means that the pool behaves as a FIFO queue - connections are taken from the idle instance pool in the order that they are returned to the pool.)
    poolPreparedState-mentsfalse开启池的prepared statement 池功能(Enable prepared statement pooling for this pool.)
    maxOpenPreparedState-mentsunlimitedstatement池能够同时分配的打开的statements的最大数量, 如果设置为0表示不限制(The maximum number of open statements that can be allocated from the statement pool at the same time, or negative for no limit.)
    NOTE - Make sure your connection has some resources left for the other statements. Pooling PreparedStatements may keep their cursors open in the database, causing a connection to run out of cursors, especially if maxOpenPreparedStatements is left at the default (unlimited) and an application opens a large number of different PreparedStatements per connection. To avoid this problem, maxOpenPreparedStatements should be set to a value less than the maximum number of cursors that can be open on a Connection.
    accessToUnderlyingConnectionAllowedfalse控制PoolGuard是否容许获取底层连接(Controls if the PoolGuard allows access to the underlying connection.) 默认false不开启, 这是一个有潜在危险的功能, 不适当的编码会造成伤害.(关闭底层连接或者在守护连接已经关闭的情况下继续使用它).请谨慎使用,并且仅当需要直接访问驱动的特定功能时使用.注意: 不要关闭底层连接, 只能关闭前面的那个. Default is false, it is a potential dangerous operation and misbehaving programs can do harmful things. (closing the underlying or continue using it when the guarded connection is already closed) Be careful and only use when you need direct access to driver specific extensions. NOTE: Do not close the underlying connection, only the original one.
    removeAbandonedfalse标记是否删除泄露的连接,如果他们超过了removeAbandonedTimout的限制.如果设置为true, 连接被认为是被泄露并且可以被删除,如果空闲时间超过removeAbandonedTimeout. 设置为true可以为写法糟糕的没有关闭连接的程序修复数据库连接. (Flags to remove abandoned connections if they exceed the removeAbandonedTimout. A connection is considered abandoned and eligible for removal if it has not been used for longer than removeAbandonedTimeout. Setting one or both of these to true can recover db connections from poorly written applications which fail to close connections.)
    removeAbandonedTimeout300泄露的连接可以被删除的超时值, 单位秒 (Timeout in seconds before an abandoned connection can be removed.)
    logAbandonedfalse标记当Statement或连接被泄露时是否打印程序的stack traces日志。被泄露的Statements和连接的日志添加在每个连接打开或者生成新的Statement,因为需要生成stack trace。(Flag to log stack traces for application code which abandoned a Statement or Connection. Logging of abandoned Statements and Connections adds overhead for every Connection open or new Statement because a stack trace has to be generated.)
    abandonedUsageTrackingfalse如果为true, 那么连接池会记录每个方法调用时候的堆栈信息以及废弃连接的调试信息(If true, the connection pool records a stack trace every time a method is called on a pooled connection and retains the most recent stack trace to aid debugging of abandoned connections. There is significant overhead added by setting this to true.)
    注:如果开启"removeAbandoned",那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2)and (getNumActive() > getMaxActive() - 3)时被触发. 举例当maxActive=20, 活动连接为18,空闲连接为1时可以触发"removeAbandoned".但是活动连接只有在没有被使用的时间超过"removeAbandonedTimeout"时才被删除,默认300秒.在resultset中游历不被计算为被使用.
    If you have enabled removeAbandonedOnMaintenance or removeAbandonedOnBorrow then it is possible that a connection is reclaimed by the pool because it is considered to be abandoned. This mechanism is triggered when (getNumIdle() < 2) and (getNumActive() > getMaxTotal() - 3) and removeAbandonedOnBorrow is true; or after eviction finishes and removeAbandonedOnMaintenance is true. For example, maxTotal=20 and 18 active connections and 1 idle connection would trigger removeAbandonedOnBorrow, but only the active connections that aren’t used for more then “removeAbandonedTimeout” seconds are removed (default 300 sec). Traversing a resultset doesn’t count as being used. Creating a Statement, PreparedStatement or CallableStatement or using one of these to execute a query (using one of the execute methods) resets the lastUsed property of the parent connection.

    C3P0 属性说明表

    属性(Parameter)默认值(Default)描述(Description)
    user同DBCP中的username属性
    password同DBCP中的password属性
    jdbcUrl同DBCP中的jdbcUrl属性
    driverClass同DBCP中的driverClass属性
    autoCommitOnClosefalse默认值false表示回滚任何未提交的任务,设置为true则全部提交,而不是在关闭连接之前回滚 (C3P0’s default policy is to rollback any uncommitted, pending work.Setting autoCommitOnClose to true causes uncommitted pending work to be committed, rather than rolled back on Connection close.) *参见DBCP中的defaultAutoCommit属性
    initialPoolSize3初始化连接:连接池启动时创建的初始化连接数量(The initial number of connections that are created when the pool is started. *参见DBCP中的initialSize属性
    maxPoolSize15连接池中保留的最大连接数(Maximum number of Connections a pool will maintain at any given time.) *参见DBCP中的maxIdle属性
    minPoolSize3连接池中保留的最小连接数(Minimum number of Connections a pool will maintain at any given time.) *参见DBCP中的maxIdle属性
    maxIdleTime0最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以秒计数),超过时间则抛出异常,如果设置为0表示无限等待(Seconds a Connection can remain pooled but unused before being discarded. Zero means idle connections never expire.) *参见DBCP中maxWaitMillis 属性
    preferredTestQuerynull定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:测试的表必须在初始数据源的时候就存在。(Defines the query that will be executed for all connection tests, if the default ConnectionTester (or some other implementation of QueryConnectionTester, or better yet FullQueryConnectionTester) is being used. Defining a preferredTestQuery that will execute quickly in your database may dramatically speed up Connection tests.)
    testConnectionOn- Checkinfalse如果设为true那么在取得连接的同时将校验连接的有效性。(If true, an operation will be performed asynchronously at every connection checkin to verify that the connection is valid. Use in combination with idleConnectionTestPeriod for quite reliable, always asynchronous Connection testing.) *参见DBCP中的testOnBorrow属性
    testConnectionOn- Checkoutfalse如果设为true那么在每个connection提交的时候都将校验其有效性,但是要确保配置的preferredTestQuery的有效性(If true, an operation will be performed at every connection checkout to verify that the connection is valid. Be sure to set an efficient preferredTestQuery or automaticTestTable if you set this to true.) *参见DBCP中的testOnBorrow属性
    idleConnectionTest- Period0如果设置大于0,表示过了多少秒检查一次空闲连接,结合testConnectionOnCheckin以及testConnectionOnCheckout使用(If this is a number greater than 0, c3p0 will test all idle, pooled but unchecked-out connections, every this number of seconds.)
    acquireRetryAttempts30定义在从数据库获取新连接失败后重复尝试的次数, 如果小于0则表示无限制的连接。(Defines how many times c3p0 will try to acquire a new Connection from the database before giving up. If this value is less than or equal to zero, c3p0 will keep trying to fetch a Connection indefinitely.)
    acquireRetryDelay1000两次连接中的间隔时间,单位毫秒。(Milliseconds, time c3p0 will wait between acquire attempts.)
    breakAfterAcquire- Failurefalse获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用 getConnection() 的时候继续尝试获取连接。如果为 true,那么在尝试获取连接失败后该数据源将声明已断开并永久关闭。(If true, a pooled DataSource will declare itself broken and be permanently closed if a Connection cannot be obtained from the database after making acquireRetryAttempts to acquire one. If false, failure to obtain a Connection will cause all Threads waiting for the pool to acquire a Connection to throw an Exception, but the DataSource will remain valid, and will attempt to acquire again following a call to getConnection().)
    checkoutTimeout0当连接池用完时客户端调用 getConnection() 后等待获取新连接的时间,潮湿后将抛出SQLException,如设为0,则为无限期等待。单位毫秒。(The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted. Zero means wait indefinitely. Setting any positive value will cause the getConnection() call to time-out and break with an SQLException after the specified number of milliseconds.)
    maxStatements0控制数据源内加载的PreparedStatements数量(Enable prepared statement pooling for this pool.)
    maxStatementsPer- Connection0定义了连接池内单个连接所拥有的最大缓存statements数(The maximum number of open statements that can be allocated from the statement pool at the same time, or negative for no limit.)

    DRUID 属性说明表

    属性(Parameter)默认值(Default)描述(Description)
    username连接数据库的用户名
    password连接数据库的密码
    jdbcUrl同DBCP中的jdbcUrl属性
    driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
    initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 *参见DBCP中的initialSize属性
    maxActive8最大连接池数量(Maximum number of Connections a pool will maintain at any given time.) *参见DBCP中的maxTotal属性
    maxIdle8已经不再使用,配置了也没效果*参见DBCP中的maxIdle属性
    minIdle最小连接池数量
    maxWait获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
    poolPreparedState- mentsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。
    maxOpenPrepared- Statements-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
    testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
    validationQuery用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。在mysql中通常为select ‘x’,在oracle中通常为select 1 from dual
    timeBetweenEviction-RunsMillis1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据
    minEvictableIdle- TimeMillisDestory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接。
    removeAbandoned对于建立时间超过removeAbandonedTimeout的连接强制关闭
    removeAbandoned-Timeout指定连接建立多长时间就需要被强制关闭
    logAbandonedfalse指定发生removeabandoned的时候,是否记录当前线程的堆栈信息到日志中
    filters属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 1)监控统计用的filter:stat 2)日志用的filter:log4j 3)防御sql注入的filter:wall


    作者: 杨校

    Java编程进修群 : 827829292
    { 本群属于收费交流群,可以确保群内无广告宣传存在,无黄赌毒存在,而且群内有大量的成熟的Java开发人员;目前已经人员在企业工作。群内有人会帮忙解决问题,也有人接项目毕设论文制作,更有大量知识总结和面试知识存在。有偿的服务才可以称之为真正的服务。}

    出处: https://blog.csdn.net/kese7952

    分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

    展开全文
  • ​ Create by yster@... :开始 在使用Spring Boot数据源之前,我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc 如下 <dependency> <groupId>org.springframework.boo...
    • ​ Create by yster@foxmail.com 2018-8-2

    一:开始

    在使用Spring Boot数据源之前,我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc
    如下

    <dependency>
        <groupId>org.springframework.boot</groupId>            
        <artifactId>spring‐boot‐starter‐jdbc</artifactId>            
    </dependency>        
    <dependency>        
        <groupId>mysql</groupId>            
        <artifactId>mysql‐connector‐java</artifactId>            
        <scope>runtime</scope>            
    </dependency> 

    或者你使用的是JPA:

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    查看JPA的依赖关系,如图,其中已经包含JDBC。

    img_0261b9906447f4369284ef16d11b4410.png

    二:数据源

    配置我们的Mysql数据库连接信息:

    spring:
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql://192.168.15.22:3306/jdbc
        driver‐class‐name: com.mysql.jdbc.Driver

    1.如何查看当前数据源?

    编写单元测试

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RobotsApplicationTests {
    
        @Autowired
        DataSource dataSource;
    
        @Test
        public void test(){
            System.out.println(dataSource.getClass());
        }
    
    }

    查看打印:

    class org.apache.tomcat.jdbc.pool.DataSource

    总结

    所以这段配置的效果就是,默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源,

    且数据源的相关配置都在DataSourceProperties里面,如下:

    @ConfigurationProperties(prefix = "spring.datasource")
    public class DataSourceProperties
            implements BeanClassLoaderAware, EnvironmentAware, InitializingBean {
        ...
    
        private String name = "testdb";
    
        private String driverClassName;
    
        private String url;
    
        private String username;
        
        private String password;
        
        .....

    2.自动配置原理

    找到org.springframework.boot.autoconfigure.jdbc包下的DataSourceConfiguration

    abstract class DataSourceConfiguration {
    
        @ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
        @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true)
        static class Tomcat extends DataSourceConfiguration {
    
            @Bean
            @ConfigurationProperties(prefix = "spring.datasource.tomcat")
            public org.apache.tomcat.jdbc.pool.DataSource dataSource(
                    DataSourceProperties properties) {
                org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource(
                        properties, org.apache.tomcat.jdbc.pool.DataSource.class);
                DatabaseDriver databaseDriver = DatabaseDriver
                        .fromJdbcUrl(properties.determineUrl());
                String validationQuery = databaseDriver.getValidationQuery();
                if (validationQuery != null) {
                    dataSource.setTestOnBorrow(true);
                    dataSource.setValidationQuery(validationQuery);
                }
                return dataSource;
            }
    
        }
        ......

    以上就是自动配置代码,原理大概是如果在classpath下存在org.apache.tomcat.jdbc.pool.DataSource.class类,并且在配置文件中指定spring.datasource.type的值为org.apache.tomcat.jdbc.pool.DataSource,或者不写都会认为可以通过。只有通过才会进入这段配置代码,才能注入DataSourceBean。

    SpringBoot默认可以支持;

    org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、

    当然了,除了Tomcat数据源依赖自带,其他都是缺少状态。

    3.自定义数据源

    找到这个类的最下面,如果spring.datasource.type的值不属于上面的几个,那么可以自己定义数据源:

    
        @ConditionalOnMissingBean(DataSource.class)
        @ConditionalOnProperty(name = "spring.datasource.type")
        static class Generic {
            @Bean
            public DataSource dataSource(DataSourceProperties properties) {
                //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
                return properties.initializeDataSourceBuilder().build();
            }
        }

    4.自动执行SQL语句

    打开DataSourceAutoConfiguration自动配置类,在自动配置DataSource时会注入DataSourceInitializer,继续打开该类,

    img_66988679857587d93922eb0be2cfc0c9.png

    img_ecdffa9fb1855029e236a806cdfaf9f2.png

    我们发现该类有一个方法被注解@PostConstruct,这个注解用于需要在依赖注入完成后执行任何初始化的方法上。该初始化方法调用了runSchemaScripts();

    img_aa63120f3de71002bd713108dd4428f2.png

    该方法的第一句就调用 getScripts()方法,获取SQL脚本,如图:

    img_524462ba7eaabdea39ec3c252ff0c655.png

    所以我们想要初始化一些数据库脚本,可以依照这个规则

    schema‐*.sql、data‐*.sql

    例如:

    schema.sql,schema‐all.sql;

    也可以使用如下指定具体位置

      schema:    
          ‐ classpath:department.sql

    作用:

    1)、runSchemaScripts();运行建表语句;

    2)、runDataScripts();运行插入数据的sql语句;

    5.操作数据库

    自动配置了JdbcTemplate操作数据库,示例:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RobotsApplicationTests {
    
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        @Test
        public void test(){
            jdbcTemplate.queryForList("SELECT * FROM user");
        }
    
    }

    三:连接池

    为什么要把数据源和连接池放在一起讲,因为当我们使用了如上所述的默认数据源之后,那么已默认启用了数据库链接池。 换句话说,你根本不需要关心连接池,它本来就有!

    1.默认连接池规则

    Tomcat7之前,Tomcat本质应用了DBCP连接池技术来实现的JDBC数据源,但在Tomcat7之后,Tomcat提供了新的JDBC连接池方案,作为DBCP的替换或备选方案,解决了许多之前使用DBCP的不利之处,并提高了性能。详细请参考:http://wiki.jikexueyuan.com/project/tomcat/tomcat-jdbc-pool.html

    Spring Boot为我们准备了最佳的数据库连接池方案,只需要在属性文件(例如application.properties)中配置需要的连接池参数即可。

    在引入spring-boot-starter-jdbc后,内部包含了tomcat-jdbc包,里面有tomcat连接池.然后通过自动配置DataSourceAutoConfigurer创建DataSource对象。

    SpringBoot创建默认DataSource时,规则如下:

    • 优先寻找创建Tomcat连接池

    • 如果没有Tomcat连接池,会查找创建HikariCP

    • 如果没有HikariCP连接池,会查找创建dbcp

    • 如果没有dbcp连接池,会查找创建dbcp2

    • 可以使用spring.datasource.type属性指定连接池类型

      spring.datasource.type=org.apache.commons.dbcp.BasicDataSource

    2.控制连接池行为

    在数据源那一讲中,我们已经知道Spring data默认使用tomcat-jdbc时,所以直接在application.yml增加配置项spring.datasource.tomcat.*来控制链接池的行为。比如如下配置。

    spring:
        datasource:
            url: jdbc:mysql://localhost:3306/jackieathome?useSSL=false
            username: root
            password: mypassword
            # 6.x版本的MySQL JDBC驱动类为com.mysql.cj.jdbc.Driver
            # 5.X版本的MySQL JDBC驱动类为com.mysql.jdbc.Driver
            driver-class-name: com.mysql.cj.jdbc.Driver
            tomcat:
                max-wait: 10000
                max-active: 30
                test-on-borrow: true
                max-idle: 5

    3.Tomcat常用属性

    属性描述
    defaultAutoCommit(布尔值)连接池所创建的连接默认自动提交状态。如果未设置,则默认采用 JDBC 驱动的缺省值(如果未设置,则不会调用 setAutoCommit 方法)。
    defaultReadOnly(布尔值)连接池所创建的连接默认只读状态。如果未设置,将不会调用 setReadOnly 方法。(有些驱动并不支持只读模式,比如:informix)
    defaultTransactionIsolation(字符串)连接池所创建的连接的默认事务隔离状态。取值范围为:(参考 javadoc) NONE``READ_COMMITTED``READ_UNCOMMITTED``REPEATABLE_READ``SERIALIZABLE 如果未设置该值,则不会调用任何方法,默认为 JDBC 驱动。
    defaultCatalog(字符串)连接池所创建的连接的默认catalog。
    driverClassName(字符串)所要使用的 JDBC 驱动的完全限定的 Java 类名。该驱动必须能从与 tomcat-jdbc.jar 同样的类加载器访问
    username(字符串)传入 JDBC 驱动以便建立连接的连接用户名。注意,DataSource.getConnection(username,password)方法默认不会使用传入该方法内的凭证,但会使用这里的配置信息。可参看 alternateUsernameAllowed 了解更多详情。
    password(字符串)传入 JDBC 驱动以便建立连接的连接密码。注意,DataSource.getConnection(username,password)方法默认不会使用传入该方法内的凭证,但会使用这里的配置信息。可参看 alternateUsernameAllowed 了解更多详情。
    maxActive(整形值)池同时能分配的活跃连接的最大数目。默认为 100
    maxIdle(整型值)池始终都应保留的连接的最大数目。默认为 maxActive:100。会周期性检查空闲连接(如果启用该功能),留滞时间超过 minEvictableIdleTimeMillis 的空闲连接将会被释放。(请参考 testWhileIdle
    minIdle(整型值)池始终都应保留的连接的最小数目。如果验证查询失败,则连接池会缩减该值。默认值取自 initialSize:10(请参考 testWhileIdle)。
    initialSize(整型值)连接器启动时创建的初始连接数。默认为 10
    maxWait(整型值)在抛出异常之前,连接池等待(没有可用连接时)返回连接的最长时间,以毫秒计。默认为 30000(30 秒)
    testOnBorrow(布尔值)默认值为 false。从池中借出对象之前,是否对其进行验证。如果对象验证失败,将其从池中清除,再接着去借下一个。注意:为了让 true 值生效,validationQuery参数必须为非空字符串。为了实现更高效的验证,可以采用 validationInterval
    testOnReturn(布尔值)默认值为 false。将对象返回池之前,是否对齐进行验证。注意:为了让 true 值生效,validationQuery参数必须为非空字符串。
    testWhileIdle(布尔值)是否通过空闲对象清除者(如果存在的话)验证对象。如果对象验证失败,则将其从池中清除。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。该属性默认值为 false,为了运行池的清除/测试线程,必须设置该值。(另请参阅 timeBetweenEvictionRunsMillis
    validationQuery(字符串)在将池中连接返回给调用者之前,用于验证这些连接的 SQL 查询。如果指定该值,则该查询不必返回任何数据,只是不抛出 SQLException 异常。默认为 null。实例值为:SELECT 1(MySQL) select 1 from dual(Oracle) SELECT 1(MySQL Server)。
    validationQueryTimeout(整型值)连接验证失败前的超时时间(以秒计)。通过在执行 validationQuery 的语句上调用 java.sql.Statement.setQueryTimeout(seconds) 来实现。池本身并不会让查询超时,完全是由 JDBC 来强制实现。若该值小于或等于 0,则禁用该功能。默认为 -1
    validatorClassName(字符串)实现 org.apache.tomcat.jdbc.pool.Validator接口并提供了一个无参(可能是隐式的)构造函数的类名。如果指定该值,将通过该类来创建一个 Validator 实例来验证连接,代替任何验证查询。默认为 null,范例值为:com.mycompany.project.SimpleValidator
    timeBetweenEvictionRunsMillis(整型值)空闲连接验证/清除线程运行之间的休眠时间(以毫秒计)。不能低于 1 秒。该值决定了我们检查空闲连接、废弃连接的频率,以及验证空闲连接的频率。默认为 5000(5 秒)
    numTestsPerEvictionRun(整型值)Tomcat JDBC 连接池没有用到这个属性。
    minEvictableIdleTimeMillis(整型值)在被确定应被清除之前,对象在池中保持空闲状态的最短时间(以毫秒计)。默认为 60000(60 秒)
    accessToUnderlyingConnectionAllowed(布尔值)没有用到的属性。可以在归入池内的连接上调用 unwrap来访问。参阅 javax.sql.DataSource 接口的相关介绍,或者通过反射调用 getConnection,或者将对象映射为 javax.sql.PooledConnection
    removeAbandoned(布尔值)该值为标志(Flag)值,表示如果连接时间超出了 removeAbandonedTimeout,则将清除废弃连接。如果该值被设置为 true,则如果连接时间大于 removeAbandonedTimeout,该连接会被认为是废弃连接,应予以清除。若应用关闭连接失败时,将该值设为 true 能够恢复该应用的数据库连接。另请参阅 logAbandoned。默认值为 false
    removeAbandonedTimeout(整型值)在废弃连接(仍在使用)可以被清除之前的超时秒数。默认为 60(60 秒)。应把该值设定为应用可能具有的运行时间最长的查询。
    logAbandoned(布尔值)标志能够针对丢弃连接的应用代码,进行堆栈跟踪记录。由于生成堆栈跟踪,对废弃连接的日志记录会增加每一个借取连接的开销。默认为 false
    connectionProperties(字符串)在建立新连接时,发送给 JDBC 驱动的连接属性。字符串格式必须为:[propertyName=property;]*。注意:user 与 password 属性会显式传入,因此这里并不需要包括它们。默认为 null。
    poolPreparedStatements(布尔值)未使用的属性
    maxOpenPreparedStatements(整型值)未使用的属性

    4.Tomcat JDBC 增强属性

    属性描述
    initSQL字符串值。当连接第一次创建时,运行的自定义查询。默认值为 null
    jdbcInterceptors字符串。继承自类 org.apache.tomcat.jdbc.pool.JdbcInterceptor的子类类名列表,由分号分隔。关于格式及范例,可参见下文的配置 JDBC 拦截器。 这些拦截器将会插入到 java.sql.Connection 对象的操作队列中。 预定义的拦截器有: org.apache.tomcat.jdbc.pool.interceptor``ConnectionState——记录自动提交、只读、catalog以及事务隔离级别等状态。org.apache.tomcat.jdbc.pool.interceptor``StatementFinalizer——记录打开的语句,并当连接返回池后关闭它们。 有关更多预定义拦截器的详尽描述,可参阅JDBC 拦截器
    validationInterval长整型值。为避免过度验证而设定的频率时间值(以秒计)。最多以这种频率运行验证。如果连接应该进行验证,但却没能在此间隔时间内得到验证,则会重新对其进行验证。默认为 30000(30 秒)。
    jmxEnabled布尔值。是否利用 JMX 注册连接池。默认为 true
    fairQueue布尔值。假如想用真正的 FIFO 方式公平对待 getConnection 调用,则取值为 true。对空闲连接列表将采用 org.apache.tomcat.jdbc.pool.FairBlockingQueue 实现。默认值为 true。如果想使用异步连接获取功能,则必须使用该标志。 设置该标志可保证线程能够按照连接抵达顺序来接收连接。 在性能测试时,锁及锁等待的实现方式有很大差异。当 fairQueue=true 时,根据所运行的操作系统,存在一个决策过程。假如系统运行在 Linux 操作系统(属性 os.name = linux)上,为了禁止这个 Linux 专有行为,但仍想使用公平队列,那么只需在连接池类加载之前,将 org.apache.tomcat.jdbc.pool.FairBlockingQueue.ignoreOS=true添加到系统属性上。
    abandonWhenPercentageFull整型值。除非使用中连接的数目超过 abandonWhenPercentageFull中定义的百分比,否则不会关闭并报告已废弃的连接(因为超时)。取值范围为 0-100。默认值为 0,意味着只要达到 removeAbandonedTimeout,就应关闭连接。
    maxAge长整型值。连接保持时间(以毫秒计)。当连接要返回池中时,连接池会检查是否达到 now - time-when-connected > maxAge 的条件,如果条件达成,则关闭该连接,不再将其返回池中。默认值为 0,意味着连接将保持开放状态,在将连接返回池中时,不会执行任何年龄检查。
    useEquals布尔值。如果想让 ProxyConnection 类使用 String.equals,则将该值设为 true;若想在对比方法名称时使用 ==,则应将其设为 false。该属性不能用于任何已添加的拦截器中,因为那些拦截器都是分别配置的。默认值为 true
    suspectTimeout整型值。超时时间(以秒计)。默认值为 0。 类似于 removeAbandonedTimeout,但不会把连接当做废弃连接从而有可能关闭连接。如果 logAbandoned 设为 true,它只会记录下警告。如果该值小于或等于 0,则不会执行任何怀疑式检查。如果超时值大于 0,而连接还没有被废弃,或者废弃检查被禁用时,才会执行怀疑式检查。如果某个连接被怀疑到,则记录下 WARN 信息并发送一个 JMX 通知。
    rollbackOnReturn布尔值。如果 autoCommit==false,那么当连接返回池中时,池会在连接上调用回滚方法,从而终止事务。默认值为 false
    commitOnReturn布尔值。如果 autoCommit==false,那么当连接返回池中时,池会在连接上调用提交方法,从而完成事务;如果 rollbackOnReturn==true,则忽略该属性。默认值为 false
    alternateUsernameAllowed布尔值。出于性能考虑,JDBC 连接池默认会忽略 DataSource.getConnection(username,password)调用,只返回之前池化的具有全局配置属性 usernamepassword的连接。 但经过配置,连接池还可以允许使用不同的凭证来请求每一个连接。为了启用这项在DataSource.getConnection(username,password)调用中描述的功能,只需将 alternateUsernameAllowed 设为 true。 如果你请求一个连接,凭证为 user 1/password 1,而连接之前使用的是 user 2/password 2 凭证,那么连接将被关闭,重新利用请求的凭证来开启。按照这种方式,池的容量始终以全局级别管理,而不是限于模式(schema)级别。 默认值为 false。 该属性作为一个改进方案,被添加到了 bug 50025 中。
    dataSource(javax.sql.DataSource)将数据源注入连接池,从而使池利用数据源来获取连接,而不是利用 java.sql.Driver接口来建立连接。它非常适于使用数据源(而非连接字符串)来池化 XA 连接或者已建立的连接时。默认值为 null
    dataSourceJNDI字符串。在 JNDI 中查找的数据源的 JNDI 名称,随后将用于建立数据库连接。参看 datasource 属性的介绍。默认值为 null
    useDisposableConnectionFacade布尔值。如果希望在连接上放上一个门面对象,从而使连接在关闭后无法重用,则要将值设为 true。这能防止线程继续引用一个已被关闭的连接,并继续在连接上查询。默认值为 true
    logValidationErrors布尔值。设为 true 时,能将验证阶段的错误记录到日志文件中,错误会被记录为 SEVERE。考虑到了向后兼容性,默认值为 false
    propagateInterruptState布尔值。传播已中断的线程(还没有清除中断状态)的中断状态。考虑到了向后兼容性,默认值为 false
    ignoreExceptionOnPreLoad布尔值。在初始化池时,是否忽略连接创建错误。取值为 true时表示忽略;设为 false 时,抛出异常,从而宣告池初始化失败。默认值为 false

    本文原创,转载请注明出处!

    展开全文
  • ADO.NET连接数据源的两种方法

    千次阅读 2018-01-27 17:45:36
    连接数据源指的是连到具体数据库文件中的一个表中...(1)DataAdapter类表示组数据命令和一个数据库连接,它们用于填充DataSet和更新数据源,因此更适用于经常更改数据库而不想经常写SQL命令的情况。 格式  s
  • 在实际的应用开发中,数据库交互通常使用数据库连接池来重用Connection对象,减少资源消耗。Spring Boot 的数据源是自动配置的。在 Spring Boot 2.2.1 版本中,有几种数据源配置可选,它们按照 HikariCP -> ...
  • Tomcat配置连接池、数据源

    千次阅读 2018-07-19 15:05:53
    1、DataSource接口介绍 (1)DataSource 概述 ... 一个DataSource对象代表了一个真正的数据源。根据DataSource的实现方法,数据源既可以是从关系数据库,也电子表格,还可以是一个表格形式的文件...
  • 其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源连接,向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑...
  • Javaweb基础:配置数据源连接数据库

    千次阅读 2019-06-04 00:32:26
    JDBC2.0之后提供了使用连接池(connection pooling)和数据源(DataSource)技术访问数据库,使用数据源的好处是不用为每HTTP请求创建一个连接对象,Servlet建立数据库连接、执行查询、处理结果集、请求结束关闭...
  • 连接对象Connection的使用

    千次阅读 2014-12-24 09:52:43
    在C#数据库编程中,Connection对象用来连接数据源,针对不同的数据库连接模式,Connection有以下三种形式: (1)SqlConnection 该对象是专为连接Sql Server数据库而设计的 (2)OleDbConnection 该对象可以连接...
  • 【JAVA】JAVA数据源

    万次阅读 多人点赞 2018-11-16 15:09:19
    文章目录前言连接池、数据源、JNDI连接池、数据源连接池思想JNDI直连数据源 前言 我们在进行数据访问,声明模板和repository之前【JAVA】Spring对JDBC的支持,都需要配置数据源用来连接数据库。数据源又可以分为两大...
  • springboot多数据源配置及切换

    千次阅读 2020-09-20 21:29:03
    注:本文的多数据源配置及切换的实现方法是,在框架中封装,具体项目中配置及使用,也适用于多模块项目 配置文件数据源读取 通过springboot的Envioment和Binder对象进行读取,无需手动声明DataSource的Bean yml...
  • SAP 数据源

    千次阅读 2020-12-15 20:41:31
    SAP BW或者BI作为数据仓库会抽取SAP系统数据和非SAP系统数据系统的主要类型有以下几种: 1、SAP系统:R/3、S/4、CRM、等, 2、文本文件:将数据库转化为XML或者CSV文件放在FTP上,然后去读取数据, 3、数据库...
  • 数据源的定义以及配置

    千次阅读 2019-06-03 09:46:27
    数据源中存储了所有建立数据库连接的信息。就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。 中文名 数据源 外文名 Data Source 目录 1 分类 2 属性 3...
  • 我们平时连接数据库大多是通过类似如下代码获取数据库连接:public class DBUtil { private static final String URL = "jdbc:mysql://127.0.0.1:3306/jdbcTest?useUnicode=true&characterEncoding=utf-8"; ...
  • 这里介绍的是MYSQL的主从复制实现及其原理,数据源分为主从,主数据源用于写操作,从数据源用于读操作,实现了读写分离 MYSQL主从复制实现以及原理 2.在配置文件里面配置主从数据源相关信息以及连接池相关信息 #####...
  • 数据库与数据源的区别

    千次阅读 2018-05-16 09:20:05
    数据库与数据源的区别jdbc基础1.什么是数据源?答:数据源定义的是连接到实际数据库的条路径而已,数据源中并无真正的数据,它仅仅...也就是说数据源仅仅是数据库的连接名称,一个数据库可以有多个数据源连接。 ...
  • dbcp2数据源配置详解

    万次阅读 2017-06-16 14:25:29
    DBCP2详细的配置表 常用链接配置 参数 描述 username 传递给JDBC驱动的... 传递给JDBC驱动的用于建立连接的URL driverClassName 使用的JDBC驱动的完整有效的java 类名 connectionProperties ...
  • BW系列之数据源

    千次阅读 2016-12-14 09:53:52
    BW系列之数据源
  • Java程序数据库连接数据源配置,数据库连接池 Java程序,用到的数据库一定要配置数据源吗? 一般写小程序直接在程序里设置连接就可以了,而大的系统一般要配置数据源 数据源是要配置到中间件服务器中的...
  • 自定义多数据源动态切换(SpringBoot+Mybatis)实现数据库读写分离1,自定义多数据源动态切换原理...从而取出不同的数据源获得连接,实现动态数据源切换的功能2,自定义数据源动态实现(基于Spring AOP+SpringBoot+M...
  • springboot 链接多数据库,动态获取数据源信息

    千次阅读 热门讨论 2019-04-09 18:12:32
    最近公司有需求需要后端访问多数据库,在网上查了半天资料,结果发现大部分都是配置的主从库这种数据源固定的情况,不符合我的需求,假设我们有这样种需求,后端需要从一个数据库的配置表里动态的读取其它...
  • 笔者曾使用powerdesign连接sqlserver时遇到一些问题,下面讲解的是关于如何让 PD 跟 MS SQL Server 协同工作 关于为什么要让 PD 跟 MS SQL Server 协同工作,这要提及一个工作场景,起初在公司...
  • Spring AOP实现多数据源切换

    千次阅读 2018-11-30 22:44:07
    有时候我们会遇到这样的场景:一个应用系统中存在多个数据源,需要根据不同业务场景进行临时切换。比如读写分离(也可以考虑使用Mycat等数据库中间件)等。 Spring提供了动态数据源的功能,可以让我们实现在对...
  • DataSource数据源

    千次阅读 2020-04-29 21:29:21
    目录1 基本概念1.1 数据源DataSource、连接池1.2 连接池思想2 数连接池分类2.1 Hikari连接池2.2 阿里druid 【前言】 我们在进行数据访问都需要配置数据源用来连接数据库。数据源又可以分为两大类:直连的数据源 ...
  • Druid是一个非常优秀的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600应用,经过一年多生产环境大...
  • springboot mybatis druid配置多数据源

    千次阅读 2020-05-16 08:59:01
    1.项目代码结构: 2,...将这个对象放入Spring容器中 @Bean(name = "oneDataSource") // 表示这个数据源是默认数据源 @Primary // 读取application.properties中的配置参数映射成为一个对象 // prefix表示参数的前缀 @...
  • 1、使用org.springframework.jdbc.datasource....说明:DriverManagerDataSource建立连接是:每次连接都创建一个新的connection,根本没有连接池的作用。     ${jdbc.driverClassName}   ${jdbc.ur

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 191,169
精华内容 76,467
关键字:

下面哪一个对象用于与数据源建立连接