天天看點

SpringBoot 整合 Druid 資料源一 Druid 資料源是什麼二 如何整合 Druid 資料源

一 Druid 資料源是什麼

Druid 是 Java 語言中最好的資料庫連接配接池,是阿裡巴巴的一個開源項目,作為一個優秀的資料庫連接配接池,Druid 提供了優秀的穩定性,并且在性能方面比其他資料庫連接配接提高了很多,最重要的是Druid 提供了實時監控功能,如資料源監控、SQL 監控、SQL 防火牆、Web 應用監控、URI 監控、Session 監控、Spring 監控等。正如Druid官網(http://druid.io/)介紹的那樣:Druid主要用于存儲、查詢和分析大型事件流。

總結:優秀

二 如何整合 Druid 資料源

2.1 引入依賴

<!-- jdbcTemplate -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!-- druid資料庫連接配接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.26</version>
</dependency>
           

2.2 Druid 參數配置

application.properties 檔案添加如下配置:

#資料庫設定
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/account
spring.datasource.username=root
spring.datasource.password=root
#--------------------------
# 下面為連接配接池的補充設定,應用到上面所有資料源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=1
spring.datasource.maxActive=50
# 配置擷取連接配接等待逾時的時間
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=false
#spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個DruidDataSource的監控資料
#spring.datasource.useGlobalDataSourceStat=true
           

2.3 Druid Datasource 執行個體化

package com.sb.config;
 
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.PropertySource;
 
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
 
 
@Configuration
@PropertySource(value = "classpath:application.properties")
public class DruidConfiguration {
 
    @Bean(destroyMethod = "close", initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
 
    /**
     * 注冊一個StatViewServlet
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String, String> initParameters = new HashMap<String, String>();
        initParameters.put("loginUsername", "admin");//屬性見:com.alibaba.druid.support.http.ResourceServlet
        initParameters.put("loginPassword", "123456");
        initParameters.put("allow", "");//預設允許所有
        initParameters.put("deny", "");
        bean.setInitParameters(initParameters);
        return bean;
    }
 
    /**
     * 配置一個web監控的filter
     * @return
     */
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean filterBean = new FilterRegistrationBean();
        filterBean.setFilter(new WebStatFilter());
        filterBean.setUrlPatterns(Arrays.asList("/*"));
 
        Map<String, String> initParameters = new HashMap<String, String>();
        initParameters.put("exclusions", "*.js,*.css,/druid/*");//屬性見:com.alibaba.druid.support.http.WebStatFilter
        filterBean.setInitParameters(initParameters);
 
        return filterBean;
    }
}
           

2.4 測試

package com.sb.controller;
 
import com.sb.dto.RetDTO;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
 
@RestController
@RequestMapping
public class TestController {
    @Resource
    private JdbcTemplate jdbcTemplate;
 
    @RequestMapping("/getUserList")
    public RetDTO<List<Map<String, Object>>> getUserList() {
        List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT id,name,age,create_datetime,update_datetime FROM user ", new Object[]{});
        return RetDTO.getReturnJson(list);
    }
}
           

通路 localhost:8080/getUserList

{
    "code": 200,
    "msg": "OK",
    "data": [
        {
            "id": 1,
            "name": "張三",
            "age": 18,
            "create_datetime": "2019-09-10T00:27:48.000+0000",
            "update_datetime": "2019-09-10T00:27:48.000+0000"
        },
        {
            "id": 2,
            "name": "李四",
            "age": 20,
            "create_datetime": "2019-09-10T00:27:48.000+0000",
            "update_datetime": "2019-09-10T00:27:48.000+0000"
        },
        {
            "id": 3,
            "name": "王五",
            "age": 19,
            "create_datetime": "2019-09-10T00:27:48.000+0000",
            "update_datetime": "2019-09-10T00:27:48.000+0000"
        }
    ],
    "desc": null
}
           

2.5 監控

通路 http://localhost:8080/druid, 使用上面配置的賬号密碼(admin/123456)。

SpringBoot 整合 Druid 資料源一 Druid 資料源是什麼二 如何整合 Druid 資料源

繼續閱讀