在Java API的開發過程中,連接資料庫是一個常見的需求。由於每次都使用 DriverManager 來取得資料庫連線會帶來較高的開銷,因此,使用連線池技術是十分必要的。 Druid 是一款高效能的 JDBC 連線池,具有監控、統計、擴充等一系列強大的功能,本文將介紹在 Java API 的開發中如何使用 Druid。
一、Druid 簡介
Druid 是阿里巴巴開發的資料庫連接池,它具有效能優異、功能豐富、使用簡單等特點。 Druid 連線池的優點如下:
二、使用Druid 進行連線池管理
下面我們來看如何在 Java 應用程式中使用 Druid 進行連線池的管理。
<!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>
//创建 Properties 对象用于存储配置信息 Properties props = new Properties(); //设置连接池基本属性 props.put("driverClassName", "com.mysql.jdbc.Driver"); props.put("url", "jdbc:mysql://localhost:3306/test"); props.put("username", "root"); props.put("password", "root"); //连接属性配置 props.put("initialSize", "5"); props.put("minIdle", "5"); props.put("maxActive", "20"); props.put("maxWait", "60000"); props.put("timeBetweenEvictionRunsMillis", "60000"); props.put("minEvictableIdleTimeMillis", "300000"); props.put("validationQuery", "SELECT 'x'"); props.put("testWhileIdle", "true"); props.put("testOnBorrow", "false"); props.put("testOnReturn", "false"); props.put("poolPreparedStatements", "true"); props.put("maxOpenPreparedStatements", "20"); props.put("filters", "stat,wall,log4j"); //创建 DruidDataSource 实例 DruidDataSource dataSource = new DruidDataSource(); dataSource.configFromPropety(props);
以上程式碼中,我們設定了資料庫連線 URL、使用者名稱、密碼,以及初始化連線數,最大連線數等設定資訊。其中,各項配置的意義如下:
minEvictableIdleTimeMillis:連接在池中最小生存的時間,單位是毫秒。
validationQuery’用來偵測連線是否有效,要求是一個查詢語句(語句的執行結果無所謂)。
-testWhileIdle:申請連線的時候偵測,如果空閒時間大於timeBetweenEvictionRunsMillis, 執行validationQuery偵測連線是否有效。
-testOnBorrow:申請連線時執行validationQuery偵測連線是否有效,做了這個設定會降低效能。
-testOnReturn:歸還連線時執行validationQuery偵測連線是否有效,做了這個設定會降低效能,並且會在連線池中增加一次判斷
-poolPreparedStatements:是否快取preparedStatement,也就是PSCache。 PSCache對支援遊標的資料庫效能提升巨大,比如說oracle。在mysql下建議關閉。
-maxOpenPreparedStatements:開啟poolPreparedStatements後,需要指定每個連接上快取statement的個數
-filters:屬性類型是字串,透過別名的方式配置擴充插件,常用的插件有:
监控统计用的filter:stat 日志用的filter:log4j 防御SQL注入的filter:wall
Connection conn = dataSource.getConnection();
// 创建 Druid 连接池 DruidDataSource dataSource = new DruidDataSource(); //... 配置数据库连接池信息 // 配置监控统计 // 设置监控统计用的 Filter,用于统计监控信息 WallFilter wallFilter = new WallFilter(); wallFilter.setDbType("mysql"); StatFilter statFilter = new StatFilter(); statFilter.setSlowSqlMillis(1000); statFilter.setLogSlowSql(true); // 设置 Druid 连接池的 Filters dataSource.setProxyFilters(Arrays.asList(wallFilter, statFilter)); // 打印 SQL 执行日志 Log4jFilter logFilter = new Log4jFilter(); logFilter.setStatementExecutableSqlLogEnable(true); dataSource.setProxyFilters(Collections.singletonList(logFilter));
具體實作過程中,我們可以按需選擇使用監控統計或日誌功能。
三、結論
本文介紹了在 Java API 的開發中如何使用 Druid 進行連線池管理。透過使用 Druid ,我們不僅可以提高應用程式的效能,還可以透過監控統計和 SQL 執行日誌等功能,更全面地了解應用程式的運作情況。
以上是Java API 開發中使用 Durid 進行資料庫連線池管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!