數(shù)據(jù)庫(kù)連接池
- 數(shù)據(jù)庫(kù)連接池是一個(gè)容器,負(fù)責(zé)分配、管理數(shù)據(jù)庫(kù)連接(Connection)
- 它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是再重新建立一個(gè)
- 釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來(lái)避免因?yàn)闆]有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏
- 好處:
- 資源重用
- 提升系統(tǒng)的響應(yīng)速度
- 避免數(shù)據(jù)庫(kù)連接遺漏
標(biāo)準(zhǔn)接口DataSource
功能:獲取連接
Connection getConnection();
常見的數(shù)據(jù)庫(kù)連接池:
- DBCP
- C3P0
- Druid
Druid連接池是阿里巴巴開源的數(shù)據(jù)庫(kù)連接池項(xiàng)目,功能強(qiáng)大,性能優(yōu)秀。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-813886.html
Druid使用步驟
- 導(dǎo)入jar包 druid-1.1.12.jar
- 定義配置文件
- 加載配置文件
- 獲取數(shù)據(jù)庫(kù)連接池對(duì)象
- 獲取連接
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化連接數(shù)量
initialSize=5
# 最大連接數(shù)
maxActive=10
# 最大等待時(shí)間
maxWait=3000
package Druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
//1.導(dǎo)入jar包
//2.定義配置文件
//3.加載配置
Properties prop=new Properties();
prop.load(new FileInputStream("C:\\Users\\Hayaizo\\IdeaProjects\\jdbc\\jdbc_test\\src\\druid.properties"));
//4.獲取連接池對(duì)象
DataSource dataSource=DruidDataSourceFactory.createDataSource(prop);
//5.獲取數(shù)據(jù)庫(kù)連接Connection
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-813886.html
druid配置詳解
屬性 | 說(shuō)明 | 建議值 |
---|---|---|
url | 數(shù)據(jù)庫(kù)的jdbc連接地址。一般為連接oracle/mysql。示例如下: | |
mysql : jdbc:mysql://ip:port/dbname?option1&option2&… | ||
oracle : jdbc:oracle:thin:@ip:port:oracle_sid | ||
username | 登錄數(shù)據(jù)庫(kù)的用戶名 | |
password | 登錄數(shù)據(jù)庫(kù)的用戶密碼 | |
initialSize | 啟動(dòng)程序時(shí),在連接池中初始化多少個(gè)連接 | 10-50已足夠 |
maxActive | 連接池中最多支持多少個(gè)活動(dòng)會(huì)話 | |
maxWait | 程序向連接池中請(qǐng)求連接時(shí),超過(guò)maxWait的值后,認(rèn)為本次請(qǐng)求失敗,即連接池 | 100 |
沒有可用連接,單位毫秒,設(shè)置-1時(shí)表示無(wú)限等待 | ||
minEvictableIdleTimeMillis | 池中某個(gè)連接的空閑時(shí)長(zhǎng)達(dá)到 N 毫秒后, 連接池在下次檢查空閑連接時(shí),將 | 見說(shuō)明部分 |
回收該連接,要小于防火墻超時(shí)設(shè)置 | ||
net.netfilter.nf_conntrack_tcp_timeout_established的設(shè)置 | ||
timeBetweenEvictionRunsMillis | 檢查空閑連接的頻率,單位毫秒, 非正整數(shù)時(shí)表示不進(jìn)行檢查 | |
keepAlive | 程序沒有close連接且空閑時(shí)長(zhǎng)超過(guò) minEvictableIdleTimeMillis,則會(huì)執(zhí) | true |
行validationQuery指定的SQL,以保證該程序連接不會(huì)池kill掉,其范圍不超 | ||
過(guò)minIdle指定的連接個(gè)數(shù)。 | ||
minIdle | 回收空閑連接時(shí),將保證至少有minIdle個(gè)連接. | 與initialSize相同 |
removeAbandoned | 要求程序從池中g(shù)et到連接后, N 秒后必須close,否則druid 會(huì)強(qiáng)制回收該 | false,當(dāng)發(fā)現(xiàn)程序有未 |
連接,不管該連接中是活動(dòng)還是空閑, 以防止進(jìn)程不會(huì)進(jìn)行close而霸占連接。 | 正常close連接時(shí)設(shè)置為true | |
removeAbandonedTimeout | 設(shè)置druid 強(qiáng)制回收連接的時(shí)限,當(dāng)程序從池中g(shù)et到連接開始算起,超過(guò)此 | 應(yīng)大于業(yè)務(wù)運(yùn)行最長(zhǎng)時(shí)間 |
值后,druid將強(qiáng)制回收該連接,單位秒。 | ||
logAbandoned | 當(dāng)druid強(qiáng)制回收連接后,是否將stack trace 記錄到日志中 | true |
testWhileIdle | 當(dāng)程序請(qǐng)求連接,池在分配連接時(shí),是否先檢查該連接是否有效。(高效) | true |
validationQuery | 檢查池中的連接是否仍可用的 SQL 語(yǔ)句,drui會(huì)連接到數(shù)據(jù)庫(kù)執(zhí)行該SQL, 如果 | |
正常返回,則表示連接可用,否則表示連接不可用 | ||
testOnBorrow | 程序 申請(qǐng) 連接時(shí),進(jìn)行連接有效性檢查(低效,影響性能) | false |
testOnReturn | 程序 返還 連接時(shí),進(jìn)行連接有效性檢查(低效,影響性能) | false |
poolPreparedStatements | 緩存通過(guò)以下兩個(gè)方法發(fā)起的SQL: | true |
public PreparedStatement prepareStatement(String sql) | ||
public PreparedStatement prepareStatement(String sql, | ||
int resultSetType, int resultSetConcurrency) | ||
maxPoolPrepareStatementPerConnectionSize | 每個(gè)連接最多緩存多少個(gè)SQL | 20 |
filters | 這里配置的是插件,常用的插件有: | stat,wall,slf4j |
監(jiān)控統(tǒng)計(jì): filter:stat | ||
日志監(jiān)控: filter:log4j 或者 slf4j | ||
防御SQL注入: filter:wall | ||
connectProperties | 連接屬性。比如設(shè)置一些連接池統(tǒng)計(jì)方面的配置。 | |
druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 | ||
比如設(shè)置一些數(shù)據(jù)庫(kù)連接屬性: | ||
到了這里,關(guān)于【Java】數(shù)據(jù)庫(kù)連接池--Druid的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!