-
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:09Connection对象,也成为连接对象,他的功能就是负责对数据源的连接,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夜话,略有修改,其他内容不再展示,详情请点击此处。
-
-
JDBC、C3P0、DBCP、Druid 数据源连接池使用的对比总结.md
2018-09-28 14:54:22Java的数据库连接性能对比 JDBC: ...它不属于某一个数据库的接口,而是可以用于定义程序与数据库连接规范,通过一整套接口,由各个不同的数据库厂商去完成所对应的实现类,由sun公司提出! 步...Java的数据库连接性能对比
JDBC:
- jdbc - 全名是 Java data base connectivity;翻译为 Java数据库连接
- 它是一个面向对象的程序接口(API);可以通过它访问到各类的 关系型数据库[注意:关系型数据库]
- 它不属于某一个数据库的接口,而是可以用于定义程序与数据库连接规范,通过一整套接口,由各个不同的数据库厂商去完成所对应的实现类,由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.jar
和commons-pool.jar
- dbcp所需jar:
-
Druid是阿里巴巴出品的数据源,而且是淘宝和支付宝专用数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个 SQL Parser。
- Druid是阿里开源的连接池,可以说是Java语言中最好的数据库连接池.Druid能够提供**
强大的日志监控
和扩展功能
,是为监控而生**的数据库连接池!【主要是监控DB池连接和SQL的执行情况】 - Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
- Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便
- 简单SQL语句执行耗时10微秒以内,复杂SQL耗时30微秒
- 通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。
- Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。
- Druid是阿里开源的连接池,可以说是Java语言中最好的数据库连接池.Druid能够提供**
-
在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方法读取
数据库连接参数
,连接事务参数
数据池连接参数
等。
附表:
DBCP c3p0 Druid 用户名 username user username 密码 password password password URL url jdbcUrl jdbcUrl 驱动类名 driverClassName driverClass driverClassName DBCP c3p0 Druid 最小连接数 minIdle(0) minPoolSize(3) minIdle(0) 初始化连接数 initialSize(0) initialPoolSize(3) initialSize(0) 最大连接数 maxTotal(8) maxPoolSize(15) maxActive(8) 最大等待时间 maxWaitMillis(毫秒) maxIdleTime(0秒) maxWait(毫秒) DBCP c3p0 Druid 开启缓存功能 poolPreparedStatements maxStatements poolPreparedStatements 单个连接拥有的最大缓存数 maxOpenPrepared- Statements maxStatementsPer- Connection maxOpenPrepared- Statements 连接有效性检测设置:
连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。如果当前连接池中某 个连接在空闲了timeBetweenEvictionRunsMillis时间后任然没有使用,则被物理性的关闭掉。有些数据库连接的时候有超时限制 (mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,这时候设置一个testWhileIdle参数为true, 可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了 保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。
DBCP c3p0 Druid 申请连接检测 testOnBorrow testConnectionOnCheckin testOnBorrow 是否超时检测 testWhileIdle testWhileIdle 空闲时间 timeBetweenEvictionRunsMillis idleConnectionTestPeriod timeBetweenEvictionRunsMillis 校验用sql语句 validationQuery preferredTestQuery validationQuery 归还连接检测 testOnReturn testConnectionOnCheckout testOnReturn 超时连接关闭设置:
removeAbandoned参数,用来检测到当前使用的连接是否发生了连接泄露,所以在代码内部就假定如果一个连接建立连接的时间很长,则将其认定为泄露,继而强制将其关闭掉。
DBCP c3p0 Druid 是否超时关闭连接 removeAbandoned breakAfterAcquireFailure removeAbandoned 超时时间 removeAbandonedTimeout checkoutTimeout removeAbandonedTimeout 是否记录日志 logAbandoned logAbandoned c3p0重连设置:
设置获取连接失败后,是否重新连接以及间隔时间。
DBCP c3p0 Druid 重连次数 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.) defaultAutoCommit driver 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.) initialSize 0 初始化连接:连接池启动时创建的初始化连接数量(The initial number of connections that are created when the pool is started. maxTotal 8 最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制(The maximum number of active connections that can be allocated from this pool at the same time, or negative for no limit.) maxIdle 8 最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制(The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.) minIdle 0 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,负数表示没有现在(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.) maxWaitMillis indefinitely 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常,如果设置为-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.) validationQuery SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,则查询必须是一个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.) testOnCreate false 指明是否在建立连接之后进行验证,如果验证失败,则尝试重新建立连接(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.) testOnBorrow true 指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.注意: 设置为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.) testOnReturn false 指明是否在归还到池中前进行检验(The indication of whether objects will be validated before being returned to the pool.) testWhileIdle false 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.注意: 设置为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.) numTestsPerEvictionRun 3 在每次空闲连接回收器线程(如果有)运行时检查的连接数量(The number of objects to examine during each run of the idle object evictor thread (if any).) minEvictableIdleTime-Millis 10006030 连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒(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.) logExpiredConnections true 说明(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. connectionInitSqls null 说明(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.) info true 说明(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-ments false 开启池的prepared statement 池功能(Enable prepared statement pooling for this pool.) maxOpenPreparedState-ments unlimited statement池能够同时分配的打开的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. accessToUnderlyingConnectionAllowed false 控制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. removeAbandoned false 标记是否删除泄露的连接,如果他们超过了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.) removeAbandonedTimeout 300 泄露的连接可以被删除的超时值, 单位秒 (Timeout in seconds before an abandoned connection can be removed.) logAbandoned false 标记当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.) abandonedUsageTracking false 如果为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属性 autoCommitOnClose false 默认值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属性 initialPoolSize 3 初始化连接:连接池启动时创建的初始化连接数量(The initial number of connections that are created when the pool is started. *参见DBCP中的initialSize属性 maxPoolSize 15 连接池中保留的最大连接数(Maximum number of Connections a pool will maintain at any given time.) *参见DBCP中的maxIdle属性 minPoolSize 3 连接池中保留的最小连接数(Minimum number of Connections a pool will maintain at any given time.) *参见DBCP中的maxIdle属性 maxIdleTime 0 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以秒计数),超过时间则抛出异常,如果设置为0表示无限等待(Seconds a Connection can remain pooled but unused before being discarded. Zero means idle connections never expire.) *参见DBCP中maxWaitMillis 属性 preferredTestQuery null 定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:测试的表必须在初始数据源的时候就存在。(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- Checkin false 如果设为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- Checkout false 如果设为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- Period 0 如果设置大于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.) acquireRetryAttempts 30 定义在从数据库获取新连接失败后重复尝试的次数, 如果小于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.) acquireRetryDelay 1000 两次连接中的间隔时间,单位毫秒。(Milliseconds, time c3p0 will wait between acquire attempts.) breakAfterAcquire- Failure false 获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用 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().) checkoutTimeout 0 当连接池用完时客户端调用 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.) maxStatements 0 控制数据源内加载的PreparedStatements数量(Enable prepared statement pooling for this pool.) maxStatementsPer- Connection 0 定义了连接池内单个连接所拥有的最大缓存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 initialSize 0 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 *参见DBCP中的initialSize属性 maxActive 8 最大连接池数量(Maximum number of Connections a pool will maintain at any given time.) *参见DBCP中的maxTotal属性 maxIdle 8 已经不再使用,配置了也没效果*参见DBCP中的maxIdle属性 minIdle 最小连接池数量 maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 poolPreparedState- ments false 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。 maxOpenPrepared- Statements -1 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 validationQuery 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。在mysql中通常为select ‘x’,在oracle中通常为select 1 from dual timeBetweenEviction-RunsMillis 1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据 minEvictableIdle- TimeMillis Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接。 removeAbandoned 对于建立时间超过removeAbandonedTimeout的连接强制关闭 removeAbandoned-Timeout 指定连接建立多长时间就需要被强制关闭 logAbandoned false 指定发生removeabandoned的时候,是否记录当前线程的堆栈信息到日志中 filters 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 1)监控统计用的filter:stat 2)日志用的filter:log4j 3)防御sql注入的filter:wall
作者: 杨校Java编程进修群 : 827829292
{ 本群属于收费交流群,可以确保群内无广告宣传存在,无黄赌毒存在,而且群内有大量的成熟的Java开发人员;目前已经人员在企业工作。群内有人会帮忙解决问题,也有人接项目毕设论文制作,更有大量知识总结和面试知识存在。有偿的服务才可以称之为真正的服务。}出处: https://blog.csdn.net/kese7952
分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。
-
深入理解Spring Boot数据源与连接池原理
2018-08-02 19:12:00 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。
二:数据源
配置我们的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
,或者不写都会认为可以通过。只有通过才会进入这段配置代码,才能注入DataSource
Bean。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
,继续打开该类,我们发现该类有一个方法被注解
@PostConstruct
,这个注解用于需要在依赖注入完成后执行任何初始化的方法上。该初始化方法调用了runSchemaScripts();
该方法的第一句就调用
getScripts()
方法,获取SQL脚本,如图:所以我们想要初始化一些数据库脚本,可以依照这个规则
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)
调用,只返回之前池化的具有全局配置属性username
和password
的连接。 但经过配置,连接池还可以允许使用不同的凭证来请求每一个连接。为了启用这项在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 -
springboot默认数据源如何设置连接数_Spring Boot系列之配置数据库连接池
2020-11-20 17:45:23在实际的应用开发中,与数据库交互通常使用数据库连接池来重用Connection对象,减少资源消耗。Spring Boot 的数据源是自动配置的。在 Spring Boot 2.2.1 版本中,有几种数据源配置可选,它们按照 HikariCP -> ... -
Tomcat配置连接池、数据源
2018-07-19 15:05:531、DataSource接口介绍 (1)DataSource 概述 ... 一个DataSource对象代表了一个真正的数据源。根据DataSource的实现方法,数据源既可以是从关系数据库,也电子表格,还可以是一个表格形式的文件... -
数据源(DataSource)是什么以及SpringBoot中数据源配置
2021-04-24 02:44:04其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与... -
Javaweb基础:配置数据源连接数据库
2019-06-04 00:32:26JDBC2.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:31SAP 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... -
JavaWeb配置数据源连接数据库详解(概念详解+多种情况源代码范例+易出错类型)
2016-06-19 12:27:07我们平时连接数据库大多是通过类似如下代码获取数据库连接:public class DBUtil { private static final String URL = "jdbc:mysql://127.0.0.1:3306/jdbcTest?useUnicode=true&characterEncoding=utf-8"; ... -
SpringBoot配置多数据源(动态切换,主从复制,读写分离)
2020-01-09 00:25:46这里介绍的是MYSQL的主从复制实现及其原理,数据源分为主从,主数据源用于写操作,从数据源用于读操作,实现了读写分离 MYSQL主从复制实现以及原理 2.在配置文件里面配置主从数据源相关信息以及连接池相关信息 #####... -
数据库与数据源的区别
2018-05-16 09:20:05数据库与数据源的区别jdbc基础1.什么是数据源?答:数据源定义的是连接到实际数据库的一条路径而已,数据源中并无真正的数据,它仅仅...也就是说数据源仅仅是数据库的连接名称,一个数据库可以有多个数据源连接。 ... -
dbcp2数据源配置详解
2017-06-16 14:25:29DBCP2详细的配置表 常用链接配置 参数 描述 username 传递给JDBC驱动的... 传递给JDBC驱动的用于建立连接的URL driverClassName 使用的JDBC驱动的完整有效的java 类名 connectionProperties ... -
BW系列之数据源
2016-12-14 09:53:52BW系列之数据源 -
Java程序数据库连接,数据源配置,数据库连接池
2015-06-01 22:17:56Java程序数据库连接,数据源配置,数据库连接池 Java程序,用到的数据库一定要配置数据源吗? 一般写小程序直接在程序里设置连接就可以了,而大的系统一般要配置数据源 数据源是要配置到中间件服务器中的... -
SpringBoot+AOP+Mybatis实现多数据源切换,实现数据库读写分离
2019-02-27 17:30:37自定义多数据源动态切换(SpringBoot+Mybatis)实现数据库读写分离1,自定义多数据源动态切换原理...从而取出不同的数据源获得连接,实现动态数据源切换的功能2,自定义数据源动态实现(基于Spring AOP+SpringBoot+M... -
springboot 链接多数据库,动态获取数据源信息
2019-04-09 18:12:32最近公司有个需求需要后端访问多个数据库,在网上查了半天资料,结果发现大部分都是配置的主从库这种数据源固定的情况,不符合我的需求,假设我们有这样一种需求,后端需要从一个数据库的配置表里动态的读取其它... -
PowerDesigner 与 SQL Server建立连接(详细版)
2019-10-29 14:07:16笔者曾使用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简介(Spring Boot + Mybatis + Druid数据源【自己定制】)
2017-07-02 12:02:35Druid是一个非常优秀的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大... -
springboot mybatis druid配置多数据源
2020-05-16 08:59:011.项目代码结构: 2,...将这个对象放入Spring容器中 @Bean(name = "oneDataSource") // 表示这个数据源是默认数据源 @Primary // 读取application.properties中的配置参数映射成为一个对象 // prefix表示参数的前缀 @... -
Spring三种建立数据源的方式(datasource)
2017-09-04 14:43:261、使用org.springframework.jdbc.datasource....说明:DriverManagerDataSource建立连接是:每次连接都创建一个新的connection,根本没有连接池的作用。 ${jdbc.driverClassName} ${jdbc.ur