日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataSource 详解

發(fā)布時(shí)間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataSource 详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JdbcTemplate

import org.springframework.jdbc.core.JdbcTemplate;

Spring為各種支持的持久化技術(shù),都提供了簡單操作的模板
使用連接池初始化。

連接池DataSource

JdbcTemplate使用連接池初始化
package javax.sql;例:

package com.github.zhangkaitao.shiro.chapter10;import com.alibaba.druid.pool.DruidDataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; /*** <p>User: Zhang Kaitao* <p>Date: 14-1-28* <p>Version: 1.0*/ public class JdbcTemplateUtils {private static JdbcTemplate jdbcTemplate;public static JdbcTemplate jdbcTemplate() {if(jdbcTemplate == null) {jdbcTemplate = createJdbcTemplate();}return jdbcTemplate;}private static JdbcTemplate createJdbcTemplate() {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/shiro");ds.setUsername("root");ds.setPassword("root");DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/shiro");dataSource.setUsername("root");dataSource.setPassword("root");return new JdbcTemplate(ds);}}

連接池特性

DriverManagerDataSource

import org.springframework.jdbc.datasource.DriverManagerDataSource

建立連接是只要有連接就新建一個(gè)connection,根本沒有連接池的作用.
BasicDataSource

import org.apache.commons.dbcp.BasicDataSource

說明:這是一種推薦說明的數(shù)據(jù)源配置方式,它真正使用了連接池技術(shù)
JndiObjectFactoryBean

import org.springframework.jndi.JndiObjectFactoryBean

JndiObjectFactoryBean 能夠通過JNDI獲取DataSource
DruidDataSource
阿里巴巴開源平臺上一個(gè)數(shù)據(jù)庫連接池
pom依賴

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>0.2.23</version> </dependency> import com.alibaba.druid.pool.DruidDataSource 配置缺省值說明
name配置這個(gè)屬性的意義在于,如果存在多個(gè)數(shù)據(jù)源,監(jiān)控的時(shí)候可以通過名字來區(qū)分開來。 如果沒有配置,將會生成一個(gè)名字,格式是:“DataSource-” + System.identityHashCode(this)
jdbcUrl連接數(shù)據(jù)庫的url,不同數(shù)據(jù)庫不一樣。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username連接數(shù)據(jù)庫的用戶名
password連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。詳細(xì)看這里:https://github.com/alibaba/druid/wiki/使用ConfigFilter
driverClassName根據(jù)url自動識別這一項(xiàng)可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassName(建議配置下)
initialSize0初始化時(shí)建立物理連接的個(gè)數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時(shí)
maxActive8最大連接池?cái)?shù)量
maxIdle8已經(jīng)不再使用,配置了也沒效果
minIdle最小連接池?cái)?shù)量
maxWait獲取連接時(shí)最大等待時(shí)間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
poolPreparedStatementsfalse是否緩存preparedStatement,也就是PSCache。PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。
maxOpenPreparedStatements-1要啟用PSCache,必須配置大于0,當(dāng)大于0時(shí),poolPreparedStatements自動觸發(fā)修改為true。在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個(gè)數(shù)值配置大一些,比如說100
validationQuery用來檢測連接是否有效的sql,要求是一個(gè)查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。
testOnBorrowtrue申請連接時(shí)執(zhí)行validationQuery檢測連接是否有效,做了這個(gè)配置會降低性能。
testOnReturnfalse歸還連接時(shí)執(zhí)行validationQuery檢測連接是否有效,做了這個(gè)配置會降低性能
testWhileIdlefalse建議配置為true,不影響性能,并且保證安全性。申請連接的時(shí)候檢測,如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
timeBetweenEvictionRunsMillis有兩個(gè)含義: 1 Destroy線程會檢測連接的間隔時(shí)間2 testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說明
numTestsPerEvictionRun不再使用,一個(gè)DruidDataSource只支持一個(gè)EvictionRun
minEvictableIdleTimeMillis
connectionInitSqls物理連接初始化的時(shí)候執(zhí)行的sql
exceptionSorter根據(jù)dbType自動識別當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時(shí),拋棄連接
filters屬性類型是字符串,通過別名的方式配置擴(kuò)展插件,常用的插件有: 監(jiān)控統(tǒng)計(jì)用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
proxyFilters類型是List<com.alibaba.druid.filter.Filter>,如果同時(shí)配置了filters和proxyFilters,是組合關(guān)系,并非替換關(guān)系

使用bean配置
屬性文件:application.properties(DataSource連接參數(shù)

jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test jdbc.username=root jdbc.password=1qaz!QAZ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" http://www.springframework.org/schema/beans" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:batch=" http://www.springframework.org/schema/batch" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"><bean id="propertyConfigure" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>./conf/application.properties</value> </list> </property> </bean><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="1" /> <property name="minIdle" value="1" /> <property name="maxActive" value="10" /><!-- 配置獲取連接等待超時(shí)的時(shí)間 --> <property name="maxWait" value="10000" /><!-- 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /><property name="testWhileIdle" value="true" /><!-- 這里建議配置為TRUE,防止取到的連接不可用 --> <property name="testOnBorrow" value="true" /> <property name="testOnReturn" value="false" /><!-- 打開PSCache,并且指定每個(gè)連接上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /><!-- 這里配置提交方式,默認(rèn)就是TRUE,可以不用配置 --><property name="defaultAutoCommit" value="true" /><!-- 驗(yàn)證連接有效與否的SQL,不同的數(shù)據(jù)配置不同 --> <property name="validationQuery" value="select 1 " /> <property name="filters" value="stat" /> <property name="proxyFilters"> <list> <ref bean="logFilter" /> </list> </property> </bean><bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter"> <property name="statementExecutableSqlLogEnable" value="false" /> </bean> </beans>

總結(jié)

以上是生活随笔為你收集整理的DataSource 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。