1. 程式人生 > >Springboot項目配置druid數據庫連接池,並監控統計功能

Springboot項目配置druid數據庫連接池,並監控統計功能

ann sig etl mvn als art err mine src

pom.xml配置依賴

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.6</version>
</dependency> 

資源文件配置信息

不管是yml文件還是properties文件,都使用以下配置

# 數據庫訪問配置
spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
spring.datasource.url: jdbc:mysql://10.170.1.16:3306/cispapi?useUnicode=true
&characterEncoding=utf-8 spring.datasource.username: root spring.datasource.password: Sinoway123 spring.datasource.driverClassName: com.mysql.jdbc.Driver # 下面為連接池的補充設置,應用到上面所有數據源中 # 初始化大小,最小,最大 spring.datasource.initialSize: 5 spring.datasource.minIdle: 5 spring.datasource.maxActive: 20 # 配置獲取連接等待超時的時間 spring.datasource.maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis: 60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 spring.datasource.minEvictableIdleTimeMillis: 300000 spring.datasource.validationQuery: SELECT 1 FROM DUAL spring.datasource.testWhileIdle: true spring.datasource.testOnBorrow: false spring.datasource.testOnReturn: false # 打開PSCache,並且指定每個連接上PSCache的大小 spring.datasource.poolPreparedStatements: true spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉後監控界面sql無法統計,‘wall‘用於防火墻 spring.datasource.filters: stat,wall,log4j spring.datasource.logSlowSql: true # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

數據源配置類

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 org.springframework.context.annotation.Primary; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; @Configuration public class DruidDBConfig { private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class); @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driverClassName}") private String driverClassName; @Value("${spring.datasource.initialSize}") private int initialSize; @Value("${spring.datasource.minIdle}") private int minIdle; @Value("${spring.datasource.maxActive}") private int maxActive; @Value("${spring.datasource.maxWait}") private int maxWait; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${spring.datasource.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${spring.datasource.validationQuery}") private String validationQuery; @Value("${spring.datasource.testWhileIdle}") private boolean testWhileIdle; @Value("${spring.datasource.testOnBorrow}") private boolean testOnBorrow; @Value("${spring.datasource.testOnReturn}") private boolean testOnReturn; @Value("${spring.datasource.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.filters}") private String filters; @Value("{spring.datasource.connectionProperties}") private String connectionProperties; @Value("${spring.datasource.logSlowSql}") private String logSlowSql; // 配置監控統計功能 // 訪問路徑 http://127.0.0.1:8081/CISP/druid/login.html // 1.配置Servlet @Bean public ServletRegistrationBean druidServlet() { ServletRegistrationBean reg = new ServletRegistrationBean(); reg.setServlet(new StatViewServlet()); reg.addUrlMappings("/druid/*"); reg.addInitParameter("loginUsername", username);// 用戶名也可以自己設置,及直接寫死 reg.addInitParameter("loginPassword", password);// 密碼也可以自己設置,及直接寫死 reg.addInitParameter("logSlowSql", logSlowSql);// 慢SQL記錄 reg.addInitParameter("allow", "101.6.244.30");// IP白名單 (沒有配置或者為空,則允許所有訪問,若配置多個則用逗號隔開) reg.addInitParameter("resetEnable", "false");// 禁用HTML頁面上的“Reset All”功能 return reg; } // 2.配置Filter @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");// 忽略資源 filterRegistrationBean.addInitParameter("profileEnable", "true"); return filterRegistrationBean; } @Bean // 聲明其為Bean實例 @Primary // 在同樣的DataSource中,首先使用被標註的DataSource public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); // configuration datasource.setInitialSize(initialSize); datasource.setMinIdle(minIdle); datasource.setMaxActive(maxActive); datasource.setMaxWait(maxWait); datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); datasource.setValidationQuery(validationQuery); datasource.setTestWhileIdle(testWhileIdle); datasource.setTestOnBorrow(testOnBorrow); datasource.setTestOnReturn(testOnReturn); datasource.setPoolPreparedStatements(poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { datasource.setFilters(filters); } catch (SQLException e) { logger.error("druid configuration initialization filter", e); } datasource.setConnectionProperties(connectionProperties); return datasource; } }

然後啟動項目,訪問:

http://IP:port/CISP/druid/login.html

技術分享圖片

輸入你設置的用戶名和密碼

點擊sign in

技術分享圖片

在項目中進行一次數據庫查詢之後,

在這裏你就可以查看配置的連接池,以及數據庫相關信息

常見問題,也可以訪問

https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

Springboot項目配置druid數據庫連接池,並監控統計功能