1. 程式人生 > >springboot整合druid連線池

springboot整合druid連線池

  • 依賴
    //mysql 驅動
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.21'
    //druid 
    compile group: 'com.alibaba', name: 'druid', version: '1.1.10'

# 1. 新建druid配置資訊類DruidConfiguration.java

package com.futao.springmvcdemo.foundation.configuration;

import com.alibaba.druid.pool.
DruidDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import javax.sql.DataSource; import java.sql.SQLException; /** * @author futao * Created on 2018/10/11. * ConfigurationProperties(prefix = "spring.datasource")使用規則,注入的欄位如果為private,則必須具有setter方法 */
@Component @ConfigurationProperties(prefix = "spring.datasource") public class DruidConfiguration { /** * 資料庫地址 */ private String url; /** * 使用者名稱 */ private String userName; /** * 密碼 */ private String password; /** * 初始化連線數量 */ private
int initialSize; /** * 最小閒置連線 */ private int minIdle; /** * 最大存活連線 */ private int maxActive; /** * 配置獲取連線等待超時的時間 */ private long maxWait; /** * 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 */ private long timeBetweenEvictionRunsMillis; /** * 配置一個連線在池中最小生存的時間,單位是毫秒 */ private long minEvictableIdleTimeMillis; /** * 配置一個連線在池中最大生存的時間,單位是毫秒 */ private long maxEvictableIdleTimeMillis; /** * */ private boolean testWhileIdle; /** * */ private boolean testOnBorrow; /** * */ private boolean testOnReturn; /** * */ private boolean poolPreparedStatements; /** * */ private int maxOpenPreparedStatements; /** * */ private boolean asyncInit; @Bean public DataSource druidDataSource() throws SQLException { DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setUrl(url); druidDataSource.setUsername(userName); druidDataSource.setPassword(password); druidDataSource.setMaxActive(maxActive); druidDataSource.setInitialSize(initialSize); druidDataSource.setMaxWait(maxWait); druidDataSource.setMinIdle(minIdle); druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); druidDataSource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); druidDataSource.setTestWhileIdle(testWhileIdle); druidDataSource.setTestOnBorrow(testOnBorrow); druidDataSource.setTestOnReturn(testOnReturn); druidDataSource.setPoolPreparedStatements(poolPreparedStatements); druidDataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements); druidDataSource.setAsyncInit(asyncInit); return druidDataSource; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getInitialSize() { return initialSize; } public void setInitialSize(int initialSize) { this.initialSize = initialSize; } public int getMinIdle() { return minIdle; } public void setMinIdle(int minIdle) { this.minIdle = minIdle; } public int getMaxActive() { return maxActive; } public void setMaxActive(int maxActive) { this.maxActive = maxActive; } public long getMaxWait() { return maxWait; } public void setMaxWait(long maxWait) { this.maxWait = maxWait; } public long getTimeBetweenEvictionRunsMillis() { return timeBetweenEvictionRunsMillis; } public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) { this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; } public long getMinEvictableIdleTimeMillis() { return minEvictableIdleTimeMillis; } public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; } public long getMaxEvictableIdleTimeMillis() { return maxEvictableIdleTimeMillis; } public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) { this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis; } public boolean isTestWhileIdle() { return testWhileIdle; } public void setTestWhileIdle(boolean testWhileIdle) { this.testWhileIdle = testWhileIdle; } public boolean isTestOnBorrow() { return testOnBorrow; } public void setTestOnBorrow(boolean testOnBorrow) { this.testOnBorrow = testOnBorrow; } public boolean isTestOnReturn() { return testOnReturn; } public void setTestOnReturn(boolean testOnReturn) { this.testOnReturn = testOnReturn; } public boolean isPoolPreparedStatements() { return poolPreparedStatements; } public void setPoolPreparedStatements(boolean poolPreparedStatements) { this.poolPreparedStatements = poolPreparedStatements; } public int getMaxOpenPreparedStatements() { return maxOpenPreparedStatements; } public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) { this.maxOpenPreparedStatements = maxOpenPreparedStatements; } public boolean isAsyncInit() { return asyncInit; } public void setAsyncInit(boolean asyncInit) { this.asyncInit = asyncInit; } }

# 2. 在application.yml中配置配置資訊

spring:
  # 資料來源
  datasource:
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    platform: mysql
    initialSize: 5
    minIdle: 10
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 2000
    minEvictableIdleTimeMillis: 600000
    maxEvictableIdleTimeMillis: 900000
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxOpenPreparedStatements: 20
    asyncInit: true
    filters: stat,wall,log4j
    logSlowSql: true

# 3. 新增過濾器DruidFilter.java

druid除了資料連線池,還集成了對站點的URL進行統計的功能,利用filter忽略druid對某些資源的統計

package com.futao.springmvcdemo.controller;

import com.alibaba.druid.support.http.WebStatFilter;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

/**
 * @author futao
 * Created on 2018/10/11.
 */
@WebFilter(filterName = "DruidFilter", urlPatterns = "/*", initParams = {
        @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略資源
})
public class DruidFilter extends WebStatFilter {
}

# 4. 定義DruidServlet.java顯示druid管理頁面

package com.futao.springmvcdemo.controller;

import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

/**
 * @author futao
 * Created on 2018/10/11.
 */
@WebServlet(urlPatterns = "/druid/*",
        initParams = {
                @WebInitParam(name = "allow", value = "127.0.0.1"),// IP白名單 (沒有配置或者為空,則允許所有訪問)
                @WebInitParam(name = "deny", value = "192.168.16.111"),// IP黑名單 (存在共同時,deny優先於allow)
                @WebInitParam(name = "loginUsername", value = "admin"),// 使用者名稱
                @WebInitParam(name = "loginPassword", value = "admin"),// 密碼
                @WebInitParam(name = "resetEnable", value = "false")// 禁用HTML頁面上的“Reset All”功能
        })
public class DruidServlet extends StatViewServlet {

    private static final long serialVersionUID = -6085007333934055609L;
}

# 5. 對於基於註解的Filter和Servlet需要在SpringBoot的啟動類上打上自動掃描註解@@ServletComponentScan

package com.futao.springmvcdemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

/**
 * @author futao
 * ServletComponentScan 開啟servlet和filter
 */
@SpringBootApplication
@ServletComponentScan
@MapperScan("com.futao.springmvcdemo.dao")
//@EnableAspectJAutoProxy
public class SpringmvcdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringmvcdemoApplication.class, args);
    }
}

# 截一波執行圖

登陸 監控頁面 監控頁面