Spring Boot整合Druid資料庫連線池

weixin_30588675發表於2020-04-05

1. 前言

Druid資料庫連線池由阿里巴巴開源,號稱是java語言中最好的資料庫連線池,是為監控而生的。Druid的官方地址是:https://github.com/alibaba/druid

通過本文,我們可以看到

  • Spring Boot 如何配置資料來源
  • Spring Boot 如何整合Druid資料庫連線池
  • 如何開啟並訪問Druid資料庫連線池的監控功能
  • Spring Boot 使用JdbcTemplate運算元據庫

2. 配置pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.20</version>
    </dependency>
</dependencies>

 

3. 在application.yml中配置資料來源

mybatis:
  type-aliases-package: com.haige.entity   # 起別名
  mapper-locations: /com/haige/repository/mapper/*.xml  # mapper對映檔案的位置
server:
  port: 8080
spring:
  application:
    name: haige
  datasource:
    haige:
      # 資料庫訪問配置,mysql。
      # 主資料來源,預設的
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test
      username: root
      password: root
      # 下面為連線池的補充設定,應用到上面所有資料來源中
      # 初始化大小,最小,最大
      initialSize: 5
      minIdle: 5
      maxActive: 20
      # 配置獲取連線等待超時的時間
      maxWait: 60000
      # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一個連線在池中最小生存的時間,單位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      #exceptionSorter: false
      testOnReturn: false
      poolPreparedStatements: true
      # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆
      filters: stat,wall,log4j
      maxPoolPreparedStatementPerConnectionSize: 20
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      useGlobalDataSourceStat: true
      # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
      #spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 合併多個DruidDataSource的監控資料
      #spring.datasource.useGlobalDataSourceStat=true
pagehelper:
  auto-dialect: "true"
  reasonable: "true"
  support-methods-arguments: "true"
  params: "count=countSql"
logging:
  config: classpath:log4j2.yml

4. 開啟Druid的監控統計功能

Druid的監控統計功能是通過filter-chain擴充套件實現,如果你要開啟監控統計功能,需要配置StatFilter,相關程式碼如下。

 

@Configuration
public class DruidConfiguration {

  private static final Logger log = LoggerFactory.getLogger(DruidConfiguration.class);

  @Bean
  public ServletRegistrationBean druidServlet() {
    log.info("init Druid Servlet Configuration ");
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
    servletRegistrationBean.setServlet(new StatViewServlet());
    servletRegistrationBean.addUrlMappings("/druid/*");
    Map<String, String> initParameters = new HashMap<String, String>();
    initParameters.put("loginUsername", "admin");// 使用者名稱
    initParameters.put("loginPassword", "admin");// 密碼
    initParameters.put("resetEnable", "false");// 禁用HTML頁面上的“Reset All”功能
    initParameters.put("allow", ""); // IP白名單 (沒有配置或者為空,則允許所有訪問)
    //initParameters.put("deny", "192.168.20.38");// IP黑名單 (存在共同時,deny優先於allow)
    servletRegistrationBean.setInitParameters(initParameters);
    return servletRegistrationBean;
  }

  @Bean
  public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new WebStatFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    return filterRegistrationBean;
  }

}

注意:在spring-webflux專案中會出現

ServletRegistrationBean空指標,即servlet註冊不進去,原因是webflux中沒有引入servlet的包,解決方案如下,在啟動類註冊進去
@SpringBootApplication
public class HaigeApplication {
    public static void main(String[] args) {
        SpringApplication.run(HaigeApplication.class, args);
    }


    @Bean
    public RequestContextListener requestContextListener(){
        return new RequestContextListener();
    }
}

等應用啟動後,可以訪問地址:http://localhost:8080/druid/,使用者名稱和密碼見上述程式碼中的設定,即admin/admin。

 

轉載於:https://www.cnblogs.com/JavaHxm/p/11339449.html

相關文章