1. 問題描述
阿里巴巴的數據庫連接池Druid在效率與穩定性都很高,被很多開發團隊使用,並且自帶的Druid監控也很好用,本章簡單介紹下springboot+druid配置連接池及監控。
2. 解決方案
2.1 pom.xml
springboot 已經有druid的starter,但是好像有點問題,不知道為什么沒拿到jar包,有可能是網絡問題,還是使用了原生的druid gav。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.26</version>
</dependency>
<!--starter有點問題,沒用-->
<!-- <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>-->
2.2 連接池配置
連接池配置沒啥說的,我們當時為了省事,直接將以前項目中的xml導過來了(在application啟動上加個標簽就好了)
<!-- datasource configuration -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="${spring.datasource.maxActive}" />
<property name="initialSize" value="${spring.datasource.initialSize}" />
<property name="maxWait" value="${spring.datasource.maxWait}" />
<property name="minIdle" value="${spring.datasource.minIdle}" />
<property name="timeBetweenEvictionRunsMillis" value="${spring.datasource.timeBetweenEvictionRunsMillis}" />
<property name="minEvictableIdleTimeMillis" value="${spring.datasource.minEvictableIdleTimeMillis}" />
<property name="testWhileIdle" value="${spring.datasource.testWhileIdle}" />
<property name="testOnBorrow" value="${spring.datasource.testOnBorrow}" />
<property name="testOnReturn" value="${spring.datasource.testOnReturn}" />
<property name="poolPreparedStatements" value="${spring.datasource.poolPreparedStatements}" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="${spring.datasource.maxPoolPreparedStatementPerConnectionSize}" />
<property name="filters" value="${spring.datasource.filters}" />
<property name="connectionProperties" value="${spring.datasource.connectionProperties}" />
</bean>
2.3 監控配置
默認繼承了一個filter,一個Servlet,使用了兩個標簽。
2.3.1 filter類
@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*",
initParams = {
@WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")
}
)
public class DruidStatFilter extends WebStatFilter {
}
2.3.2 servlet類
@WebServlet(urlPatterns = "/druid/*",
initParams = {
@WebInitParam(name = "loginUsername", value = "laowang"),// 用戶名
@WebInitParam(name = "loginPassword", value = "lw123"),// 密碼
@WebInitParam(name = "resetEnable", value = "false")// 禁用HTML頁面上的“Reset All”功能
}
)
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = 1L;
}
2.3.3 啟動類上增加標簽
@ServletComponentScan
@SpringBootApplication
public class SptestApplication {
public static void main(String[] args) {
SpringApplication.run(SptestApplication.class, args);
}
}
ok,配置完了。
2.4 訪問界面
2.4.1 訪問首頁
地址:http://192.168.0.10:9107/druid/login.html
2.4.2 SQL監控
可以監控具體執行的sql,時間行數等,用於分析慢SQL,優化響應時間。
2.4.3 URI監控
可以看到接口的執行時間及訪問次數,為系統優化提供參考。