Spring Boot 使用Druid詳解
Druid是Java語言中最好的數(shù)據(jù)庫連接池,并且能夠提供強大的監(jiān)控和擴展功能,下面來說明如何在 SpringBoot 中配置使用Druid。
步驟:
1. 在pom.xml中加載依賴
2. 在application.properties中加入數(shù)據(jù)源配置
3. 編寫DruidConfiguration,通過@Bean注解的方式注入druid servlet和filter,以便提供監(jiān)控頁面訪問
4. 瀏覽器訪問
一、在pom.xml中加入依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
二、在application.properties中加入數(shù)據(jù)源配置
################## server ################################ server.port=8080 ################## datasource ################################ spring.datasource.url = jdbc:mysql://localhost:3306/spring spring.datasource.username = root spring.datasource.password = 123456 spring.datasource.driverClassName = com.mysql.jdbc.Driver #使用Druid數(shù)據(jù)源 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 下面為連接池的補充設(shè)置,應(yīng)用到上面所有數(shù)據(jù)源中 # 初始化大小,最小,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 # 配置獲取連接等待超時的時間 spring.datasource.maxWait=60000 # 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROMDUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 打開PSCache,并且指定每個連接上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻 spring.datasource.filters=stat,wall,log4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多個DruidDataSource的監(jiān)控數(shù)據(jù) #spring.datasource.useGlobalDataSourceStat=true ################ Java Persistence Api ########################### # Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update) spring.jpa.hibernate.ddl-auto = update #[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy] spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy # stripped before adding them to the entity manager) spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5Dialect #暫時不用redis,所以none,spring.session.store-type=reids spring.session.store-type=none
以上是我項目中的配置信息,大家只要關(guān)注datasource部分即可。
三、編寫DruidConfiguration配置類,通過@Bean注解的方式注入druid servlet和filter,以便提供監(jiān)控頁面訪問
package com.example.config;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
/**
* 配置druid數(shù)據(jù)源
*
*/
@Configuration
public class DruidConfiguration {
private Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
@Bean
public ServletRegistrationBean druidStatViewServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
registrationBean.addInitParameter("allow", "127.0.0.1");
registrationBean.addInitParameter("deny", "192.168.31.234");
registrationBean.addInitParameter("loginUsername", "admin");
registrationBean.addInitParameter("loginPassword", "123456");
registrationBean.addInitParameter("resetEnable", "false");
return registrationBean;
}
@Bean
public FilterRegistrationBean druidWebStatViewFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(new WebStatFilter());
registrationBean.addInitParameter("urlPatterns", "/*");
registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
return registrationBean;
}
@Bean
public DataSource druidDataSource(@Value("${spring.datasource.url}") String url,
@Value("${spring.datasource.driverClassName}") String driver,
@Value("${spring.datasource.username}") String userName,
@Value("${spring.datasource.password}") String password,
@Value("${spring.datasource.maxActive}") int maxActive,
@Value("${spring.datasource.filters}") String filters,
@Value("${spring.datasource.initialSize}")
int initialSize,
@Value("${spring.datasource.minIdle}")
int minIdle,
@Value("${spring.datasource.maxWait}")
int maxWait,
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
int timeBetweenEvictionRunsMillis,
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
int minEvictableIdleTimeMillis,
@Value("${spring.datasource.validationQuery}")
String validationQuery,
@Value("${spring.datasource.testWhileIdle}")
boolean testWhileIdle,
@Value("${spring.datasource.testOnBorrow}")
boolean testOnBorrow,
@Value("${spring.datasource.testOnReturn}")
boolean testOnReturn,
@Value("${spring.datasource.poolPreparedStatements}")
boolean poolPreparedStatements,
@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
int maxPoolPreparedStatementPerConnectionSize,
@Value("${spring.datasource.connectionProperties}")
String connectionProperties,
@Value("${spring.datasource.useGlobalDataSourceStat}")
boolean useGlobalDataSourceStat
) {
DruidDataSource dataSource = new DruidDataSource();
/*數(shù)據(jù)源主要配置*/
dataSource.setUrl(url);
dataSource.setDriverClassName(driver);
dataSource.setUsername(userName);
dataSource.setPassword(password);
/*數(shù)據(jù)源補充配置*/
dataSource.setMaxActive(maxActive);
dataSource.setInitialSize(initialSize);
dataSource.setMinIdle(minIdle);
dataSource.setMaxWait(maxWait);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setPoolPreparedStatements(poolPreparedStatements);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
dataSource.setConnectionProperties(connectionProperties);
dataSource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
try {
dataSource.setFilters(filters);
logger.info("Druid數(shù)據(jù)源初始化設(shè)置成功......");
} catch (SQLException e) {
e.printStackTrace();
logger.info("Druid數(shù)據(jù)源filters設(shè)置失敗......");
}
return dataSource;
}
}
四、瀏覽器訪問
在瀏覽器中輸入http://localhost:8080/druid/index.html,首次訪問需要使用賬號和密碼登錄


在數(shù)據(jù)源一欄中,所有加"*"標(biāo)識的都不能為空,,尤其是filter類名,否則會看不到SQL監(jiān)控數(shù)據(jù)。
五、查看SQL監(jiān)控
執(zhí)行刪除某條記錄后,查看SQL監(jiān)控

到這里,我們就把druid配置成功了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 通過springboot+mybatis+druid配置動態(tài)數(shù)據(jù)源
- springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid)
- Spring Boot使用Druid連接池的示例代碼
- Spring Boot+Mybatis+Druid+PageHelper實現(xiàn)多數(shù)據(jù)源并分頁的方法
- SpringBoot使用Druid數(shù)據(jù)源的配置方法
- SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例
- 詳解Spring Boot下Druid連接池的使用配置分析
- Spring Boot 整合 Druid過程解析
相關(guān)文章
Java基礎(chǔ)之Integer使用的注意事項及面試題
這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之Integer使用注意事項及面試題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
Java SE使用數(shù)組實現(xiàn)高速數(shù)字轉(zhuǎn)換功能
隨著大數(shù)據(jù)時代的到來,數(shù)字轉(zhuǎn)換功能變得越來越重要,在Java開發(fā)中,數(shù)字轉(zhuǎn)換功能也是經(jīng)常用到的,下面我們就來學(xué)習(xí)一下如何使用Java SE數(shù)組實現(xiàn)高速的數(shù)字轉(zhuǎn)換功能吧2023-11-11
關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理
這篇文章主要介紹了關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理,SpringBoot提供了多種方式來處理異常,在本文中,我們將介紹SpringBoot中的@ExceptionHandler注解,演示如何使用它進(jìn)行局部異常處理2023-07-07
Java實現(xiàn)將CSV轉(zhuǎn)為Excel的示例代碼
CSV(Comma?Separated?Values)文件是一種純文本文件,包含用逗號分隔的數(shù)據(jù),常用于將數(shù)據(jù)從一個應(yīng)用程序?qū)牖驅(qū)С龅搅硪粋€應(yīng)用程序。本文將利用Java實現(xiàn)CSV轉(zhuǎn)為Excel,感興趣的可以了解一下2022-03-03
Java基于動態(tài)規(guī)劃法實現(xiàn)求最長公共子序列及最長公共子字符串示例
這篇文章主要介紹了Java基于動態(tài)規(guī)劃法實現(xiàn)求最長公共子序列及最長公共子字符串,簡單描述了動態(tài)規(guī)劃法的概念、原理,并結(jié)合實例形式分析了Java使用動態(tài)規(guī)劃法求最長公共子序列以及最長公共子字符串相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-08-08
Java實現(xiàn)規(guī)則幾何圖形的繪制與周長面積計算詳解
隨著計算機的發(fā)展,人們對圖形的計算要求會越來越高。在各行各業(yè)中的計算人員會對圖形的計算要有便利的要求,規(guī)則幾何圖形問題求解程序應(yīng)運而生!本文將用Java編寫一個程序,可以實現(xiàn)規(guī)則幾何圖形的繪制與周長面積計算,感興趣的可以了解一下2022-07-07

